Reputation: 85
I am currently learning java by writing my programs from C++ to Java. I am trying to print the data using recursive binary search tree, but its not printing
Here is my code:
public class PersonRec {
int bribe;
PersonRec lchild;
PersonRec rchild;
}
import java.util.Scanner;
public class Tree {
private PersonRec root;
public Tree()
{
root = null;
}
public void Add()
{
int aBribe;
Scanner scan = new Scanner(System.in);
System.out.println("Enter person's contribution: ");
aBribe = scan.nextInt();
Insert(root, aBribe);
}
public void Insert(PersonRec root, int aBribe)
{
if(root == null)
{
root = new PersonRec();
root.rchild = null;
root.lchild = null;
root.bribe = aBribe;
}
else if(aBribe < root.bribe)
{
Insert(root.lchild, aBribe);
}
else
{
Insert(root.rchild, aBribe);
}
}
public void view()
{
if(root == null)
{
System.out.println("Tree is empty" + "\n");
}
else
DisplayTree(root);
}
public void DisplayTree(PersonRec root)
{
if(root == null)
return;
DisplayTree(root.lchild);
System.out.println(" " + root.bribe);
System.out.println("\n");
DisplayTree(root.rchild);
}
public static void main(String args[])
{
Tree myList = new Tree();
int choice;
do
{
Scanner scan = new Scanner(System.in);
System.out.println("\nMenu\n");
System.out.println("==============================\n\n");
System.out.println("1. Add student to waiting list\n");
System.out.println("2. View waiting list\n");
System.out.println("3. Exit program \n_");
System.out.println("Please enter choice: ");
choice = scan.nextInt();
switch(choice)
{
case 1: myList.Add();
break;
case 2: myList.view();
break;
}
}
while(choice != 3);
}
}
When I type 1, i insert a bribe amount example: 23 when i type 2 again fro the menu its not being inserted in my tree it says, "tree is empty"
Thanks
Upvotes: 0
Views: 461
Reputation: 519
In you Insert method, root is just a local variable inside the method. And since at leaf level, null is passed, it has lost the connection with your myList. You have to create instance for lchild before move on to Insert(root.lchild, aBribe).
import java.util.Scanner;
class PersonRec {
int bribe;
String name;
PersonRec lchild;
PersonRec rchild;
}
public class Tree {
private PersonRec root;
public Tree() {
root = null;
}
public void Add() {
Scanner scan = new Scanner(System.in);
System.out.println("Enter person's name: ");
String name = scan.next();
System.out.println("Enter person's contribution: ");
int aBribe = scan.nextInt();
this.Add(name, aBribe);
}
public void Add(String name, int aBribe) {
if (this.root == null) {
root = this.createRecord(name, aBribe);
} else {
this.Insert(root, name, aBribe);
}
}
private PersonRec createRecord(String name, int aBribe) {
PersonRec rec = new PersonRec();
rec.bribe = aBribe;
rec.name = name;
rec.rchild = null;
rec.lchild = null;
return rec;
}
private void Insert(PersonRec rec, String name, int aBribe) {
if (aBribe < rec.bribe) {
if (rec.lchild == null) {
rec.lchild = this.createRecord(name, aBribe);
} else {
Insert(rec.lchild, name, aBribe);
}
} else {
if (rec.rchild == null) {
rec.rchild = this.createRecord(name, aBribe);
} else {
Insert(rec.rchild, name, aBribe);
}
}
}
public void view() {
if (root == null) {
System.out.println("Tree is empty" + "\n");
} else
DisplayTree(root);
}
public void DisplayTree(PersonRec root) {
if (root == null)
return;
DisplayTree(root.lchild);
System.out.println(" " + root.name + ":" + root.bribe);
System.out.println("\n");
DisplayTree(root.rchild);
}
public static void main(String args[]) {
Tree myList = new Tree();
int choice;
do {
Scanner scan = new Scanner(System.in);
System.out.println("\nMenu\n");
System.out.println("==============================\n\n");
System.out.println("1. Add student to waiting list\n");
System.out.println("2. View waiting list\n");
System.out.println("3. Exit program \n_");
System.out.println("Please enter choice: ");
choice = scan.nextInt();
switch (choice) {
case 1:
myList.Add();
break;
case 2:
myList.view();
break;
}
} while (choice != 3);
}
}
Upvotes: 2