我目前正在通过将我的程序从C ++编写到Java来学习java。 我试图使用递归二进制搜索树打印数据,但它不打印
这是我的代码:
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);
}
}
当我输入1时,我插入贿赂金额示例:23 当我再次从菜单中输入2时,它没有插入我的树中,它说“树是空的”
由于
答案 0 :(得分:2)
在Insert方法中,root只是方法中的局部变量。 因为在叶级别,传递null,它已失去与myList的连接。 您必须先创建lchild实例,然后再继续插入(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);
}
}