实现二叉树

时间:2013-05-07 07:24:10

标签: java

我正在尝试实现二叉树,但它只是没有取根。有任何想法吗?看起来根应该插入正常,但是当我打印它时我只是得到一个null。我是否尝试仅向树中添加不“粘”的临时节点?

public class tree {
    public static void main(String args[]){
        Treeb tree = new Treeb();
        tree.add(10);
        tree.add(20);
        tree.add(2);
        tree.add(6);
        tree.printTree();
    }
}
class Node{
    int data;
    Node left;
    Node right;
    public Node(int data){
        this.data = data;
        left = null;
        right = null;
    }
    Node getLeft(){
        return left;
    }
    Node getRight(){
        return right;
    }
}

class Treeb{
    Node root;
    Treeb(){
        root = null;
    }

    void add(int n){
        addNode(n, root);
    }

    void addNode(int n, Node vert){
        if(vert == null){
            vert = new Node(n);
        }
        else if(vert.left.data < n){
            if(vert.left == null){
                vert.left = new Node(n);
            }
            else{
                addNode(n, vert.left);
            }
        }
        else if(vert.right.data >= n){
            if(vert.right == null){
                vert.right = new Node(n);
            }
            else{
                addNode(n,vert.right);
            }
        }
    }
    void printTree(){
        if(root != null){
            printChild(root);
        }
        System.out.println(root);
    }
    void printChild(Node leaf){
        System.out.print(leaf.data);
        if(leaf.left != null){
            printChild(leaf.getLeft());
        }
        if(leaf.right != null){
            printChild(leaf.getRight());
        }
    }
}

3 个答案:

答案 0 :(得分:4)

您要为vert分配一个新的引用,而不是root,这就是它保持null的原因。

答案 1 :(得分:3)

getLeft()getRight() 可以(并且会)在某个时间返回null。您应该在printChild()中确保leaf本身不是null。 (你if(leaf.left != null) leaf null可能会在root中获得 NPE ,你可能还想再次重新考虑你的树构造,null在你的情况下是{{1}}。

答案 2 :(得分:3)

您的方法addNode(int, Node)无效。

首先:

if(vert == null){
    vert = new Node(n);
}

您正在将新节点分配给 local 变量。因此,新节点在方法结束时被丢弃。

第二

}
else if(vert.left.data < n){
    // code
}
else if(vert.right.data >= n){

vert.leftvert.right可以是null,因此当vert不是null时,您会获得NPE。