0

我正在尝试实现二叉树,但它只是没有扎根。有任何想法吗?看起来根应该可以很好地插入,但是当我打印它时我只是得到一个空值。我是否试图仅将临时节点添加到不“粘”的树中?

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());
        }
    }
}
4

3 回答 3

4

您正在分配vert一个新的参考,但不是root,这就是它保持不变的原因null

于 2013-05-07T07:31:32.097 回答
3

getLeft()并且getRight() 可以(并且将)在null某个时候返回。你应该确保你的printChild()thatleaf本身不是null. (因为is ,您可能会获得NPE ) ,您可能还想重新考虑您的树结构,就您而言。if(leaf.left != null)leafnullrootnull

于 2013-05-07T07:29:29.953 回答
3

你的方法addNode(int, Node)不行。

第一的:

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

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

第二:

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

vert.left并且vert.right可以,所以当不是null时你会得到一个 NPE 。vertnull

于 2013-05-07T07:35:27.193 回答