import [Link].
*;
import [Link].*;
class Info {
private String data;
private int number;
public String getData() {
return data;
}
public void setData(String data) {
[Link] = data;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
[Link] = number;
}
@Override
public String toString() {
return "(" + data + ", " + number + ")";
}
}
class Node {
private Info info;
private Node left;
private Node right;
public Info getInfo() {
return info;
}
public void setInfo(Info info) {
[Link] = info;
}
public Node getLeft() {
return left;
}
public void setLeft(Node left) {
[Link] = left;
}
public Node getRight() {
return right;
}
public void setRight(Node right) {
[Link] = right;
}
}
class BinaryTree {
private Node root;
public void insert(Info info) {
root = insertRecursive(root, info);
}
private Node insertRecursive(Node root, Info info) {
if (root == null) {
Node newNode = new Node();
[Link](info);
return newNode;
}
if ([Link]() < [Link]().getNumber()) {
[Link](insertRecursive([Link](), info));
} else if ([Link]() > [Link]().getNumber()) {
[Link](insertRecursive([Link](), info));
}
return root;
}
public void printPreorder() {
printPreorderRec(root);
}
private void printPreorderRec(Node root) {
if (root != null) {
[Link]([Link]() + " ");
printPreorderRec([Link]());
printPreorderRec([Link]());
}
}
public void printPostorder() {
printPostorderRec(root);
}
private void printPostorderRec(Node root) {
if (root != null) {
printPostorderRec([Link]());
printPostorderRec([Link]());
[Link]([Link]() + " ");
}
}
public void printInorder() {
printInorderRec(root);
}
private void printInorderRec(Node root) {
if (root != null) {
printInorderRec([Link]());
[Link]([Link]() + " ");
printInorderRec([Link]());
}
}
public int count() {
return countNodes(root, 1); // Start counting from level 1
}
private int countNodes(Node root, int level) {
if (root == null)
return 0;
else
return 1 + countNodes([Link](), level + 1) +
countNodes([Link](), level + 1);
}
public Info search(int num) {
return searchRec(root, num);
}
private Info searchRec(Node root, int num) {
if (root == null || [Link]().getNumber() == num) {
if (root != null) {
return [Link]();
} else {
return null;
}
}
if (num < [Link]().getNumber()) {
return searchRec([Link](), num);
} else {
return searchRec([Link](), num);
}
}
public void delete(int num) {
root = deleteRec(root, num);
}
private Node deleteRec(Node root, int num) {
if (root == null)
return root;
if (num < [Link]().getNumber())
[Link](deleteRec([Link](), num));
else if (num > [Link]().getNumber())
[Link](deleteRec([Link](), num));
else {
if ([Link]() == null)
return [Link]();
else if ([Link]() == null)
return [Link]();
[Link](minValueNode([Link]()).getInfo());
[Link](deleteRec([Link](),
[Link]().getNumber()));
}
return root;
}
private Node minValueNode(Node node) {
Node current = node;
while ([Link]() != null)
current = [Link]();
return current;
}
public void edit(int oldNum, Info newInfo) {
delete(oldNum);
insert(newInfo);
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner([Link]);
BinaryTree tree = new BinaryTree();
int choice;
do {
[Link]("Menu");
[Link]("1) Insert");
[Link]("2) PrintPreorder");
[Link]("3) PrintPostorder");
[Link]("4) PrintInorder");
[Link]("5) Count");
[Link]("6) Search");
[Link]("7) Delete");
[Link]("8) Edit");
[Link]("9) Exit");
[Link]("Enter your choice: ");
choice = [Link]();
[Link](); // Consume newline
switch (choice) {
case 1:
try {
File numberFile = new File("Numbers");
Scanner numberScanner = new Scanner(numberFile);
File infoFile = new File("Names");
Scanner infoScanner = new Scanner(infoFile);
while ([Link]() &&
[Link]()) {
int number = [Link]([Link]());
String data = [Link]();
Info info = new Info();
[Link](number + " " + data);
[Link](data);
[Link](number);
[Link](info);
}
[Link]();
[Link]();
} catch (FileNotFoundException e) {
[Link]("File not found: " + [Link]());
}
break;
case 2:
[Link]("Preorder traversal:");
[Link]();
[Link]();
break;
case 3:
[Link]("Postorder traversal:");
[Link]();
[Link]();
break;
case 4:
[Link]("Inorder traversal:");
[Link]();
[Link]();
break;
case 5:
[Link]("Number of nodes in the tree: " +
[Link]());
break;
case 6:
[Link]("Enter Number to search: ");
int numToSearch = [Link]();
Info result = [Link](numToSearch);
if (result != null) {
[Link]("Search for Number " + numToSearch +
": Found - " + result);
} else {
[Link]("Search for Number " + numToSearch +
": Not Found");
}
break;
case 7:
[Link]("Enter Number to delete: ");
int numToDelete = [Link]();
[Link](numToDelete);
[Link]("Inorder traversal after deletion:");
[Link]();
[Link]();
break;
case 8:
Info newInfo = new Info();
[Link]("Enter old number: ");
int oldNum =
[Link]();
[Link](); // Consume newline
[Link]("Enter new data: ");
[Link]([Link]());
[Link]("Enter new number: ");
[Link]([Link]());
[Link](oldNum, newInfo);
[Link]("Inorder traversal after editing:");
[Link]();
[Link]();
break;
case 9:
[Link]("exit");
break;
default:
[Link]("no");
}
} while (choice != 9);
[Link]();
}
}