我正在使用Java实现二进制树,如下所示:
public class Node {
int item;
Node left;
Node right;
public Node (int n){
item=n;
left=null;
right=null;
}
public int getItem(){
return item;
}
}
public class Tree{
Node root;
public void add(int item){
if (root==null){
root=new Node(item);
}
else{
Node rootT;
rootT=root;
rooT=add(rooT,item);
}
}
public Node add(Node n, int item){
if (n==null){
n=new Node(item);
}
else{
if (item<root.item){
n.izq=add(n.left,item);
}
else{
n.right=add(n.right,item);
}
}
return n;
}
public void inorder(Node n){
if (n!=null){
inorder(n.left);
System.out.println(n.item);
inorder(n.right);
}
}
}
我使用rootT遍历树而不更改原始树的值。我的问题是,当我添加元素[10,100,20,5,4]时,它打印出我4,5,10,100,20;这不是正确的顺序,有什么不对? 感谢
答案 0 :(得分:1)
您的代码中有错误:
public Node add(Node n, int item){
if (n==null){
n=new Node(item);
}
else{
if (n<root.item){
n.izq=add(n.left,item);
}
else{
n.right=add(n.right,item);
}
}
return n;
}
您总是在比较树的根(它甚至不应该编译,因为您将节点与整数进行比较)。而您应该与递归中的当前节点进行比较:
public Node add(Node n, int item){
if (n==null){
n=new Node(item);
}
else{
if (item<n.item){
n.izq=add(n.left,item);
}
else{
n.right=add(n.right,item);
}
}
return n;
}