将项递归地添加到二叉树中

时间:2014-10-23 02:17:13

标签: java recursion

我正在使用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;这不是正确的顺序,有什么不对? 感谢

1 个答案:

答案 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;
}