0% found this document useful (0 votes)
12 views11 pages

BST Program

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views11 pages

BST Program

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 11

import java.util.

*;
import java.io.*;

class Info {
private String data;
private int number;

public String getData() {


return data;
}

public void setData(String data) {


this.data = data;
}

public int getNumber() {


return number;
}

public void setNumber(int number) {


this.number = 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) {


this.info = info;
}

public Node getLeft() {


return left;
}
public void setLeft(Node left) {
this.left = left;
}

public Node getRight() {


return right;
}

public void setRight(Node right) {


this.right = 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();
newNode.setInfo(info);
return newNode;
}

if (info.getNumber() < root.getInfo().getNumber()) {


root.setLeft(insertRecursive(root.getLeft(), info));
} else if (info.getNumber() > root.getInfo().getNumber()) {
root.setRight(insertRecursive(root.getRight(), info));
}

return root;
}

public void printPreorder() {


printPreorderRec(root);
}

private void printPreorderRec(Node root) {


if (root != null) {
System.out.print(root.getInfo() + " ");
printPreorderRec(root.getLeft());
printPreorderRec(root.getRight());
}
}

public void printPostorder() {


printPostorderRec(root);
}

private void printPostorderRec(Node root) {


if (root != null) {
printPostorderRec(root.getLeft());
printPostorderRec(root.getRight());
System.out.print(root.getInfo() + " ");
}
}

public void printInorder() {


printInorderRec(root);
}

private void printInorderRec(Node root) {


if (root != null) {
printInorderRec(root.getLeft());
System.out.print(root.getInfo() + " ");
printInorderRec(root.getRight());
}
}

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(root.getLeft(), level + 1) +
countNodes(root.getRight(), level + 1);
}

public Info search(int num) {


return searchRec(root, num);
}

private Info searchRec(Node root, int num) {


if (root == null || root.getInfo().getNumber() == num) {
if (root != null) {
return root.getInfo();
} else {
return null;
}
}
if (num < root.getInfo().getNumber()) {
return searchRec(root.getLeft(), num);
} else {
return searchRec(root.getRight(), num);
}
}

public void delete(int num) {


root = deleteRec(root, num);
}

private Node deleteRec(Node root, int num) {


if (root == null)
return root;

if (num < root.getInfo().getNumber())


root.setLeft(deleteRec(root.getLeft(), num));
else if (num > root.getInfo().getNumber())
root.setRight(deleteRec(root.getRight(), num));
else {
if (root.getLeft() == null)
return root.getRight();
else if (root.getRight() == null)
return root.getLeft();

root.setInfo(minValueNode(root.getRight()).getInfo());
root.setRight(deleteRec(root.getRight(),
root.getInfo().getNumber()));
}
return root;
}

private Node minValueNode(Node node) {


Node current = node;
while (current.getLeft() != null)
current = current.getLeft();
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(System.in);
BinaryTree tree = new BinaryTree();

int choice;
do {
System.out.println("Menu");
System.out.println("1) Insert");
System.out.println("2) PrintPreorder");
System.out.println("3) PrintPostorder");
System.out.println("4) PrintInorder");
System.out.println("5) Count");
System.out.println("6) Search");
System.out.println("7) Delete");
System.out.println("8) Edit");
System.out.println("9) Exit");

System.out.print("Enter your choice: ");


choice = scanner.nextInt();
scanner.nextLine(); // 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 (numberScanner.hasNextLine() &&


infoScanner.hasNextLine()) {
int number = Integer.parseInt(numberScanner.nextLine());
String data = infoScanner.nextLine();
Info info = new Info();
System.out.println(number + " " + data);
info.setData(data);
info.setNumber(number);
tree.insert(info);
}
numberScanner.close();
infoScanner.close();
} catch (FileNotFoundException e) {
System.err.println("File not found: " + e.getMessage());
}
break;
case 2:
System.out.println("Preorder traversal:");
tree.printPreorder();
System.out.println();
break;
case 3:
System.out.println("Postorder traversal:");
tree.printPostorder();
System.out.println();
break;
case 4:
System.out.println("Inorder traversal:");
tree.printInorder();
System.out.println();
break;
case 5:
System.out.println("Number of nodes in the tree: " +
tree.count());
break;
case 6:
System.out.print("Enter Number to search: ");
int numToSearch = scanner.nextInt();
Info result = tree.search(numToSearch);
if (result != null) {
System.out.println("Search for Number " + numToSearch +
": Found - " + result);
} else {
System.out.println("Search for Number " + numToSearch +
": Not Found");
}
break;
case 7:
System.out.print("Enter Number to delete: ");
int numToDelete = scanner.nextInt();
tree.delete(numToDelete);
System.out.println("Inorder traversal after deletion:");
tree.printInorder();
System.out.println();
break;
case 8:
Info newInfo = new Info();
System.out.print("Enter old number: ");
int oldNum =
scanner.nextInt();
scanner.nextLine(); // Consume newline
System.out.print("Enter new data: ");
newInfo.setData(scanner.nextLine());
System.out.print("Enter new number: ");
newInfo.setNumber(scanner.nextInt());
tree.edit(oldNum, newInfo);
System.out.println("Inorder traversal after editing:");
tree.printInorder();
System.out.println();
break;
case 9:
System.out.println("exit");
break;
default:
System.out.println("no");
}
} while (choice != 9);

scanner.close();
}
}

You might also like