0

二分木を実装しようとしていますが、ルートを取得していません。何か案は?ルートが正常に挿入されているように見えますが、印刷すると 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());
        }
    }
}
4

3 に答える 3

4

vertあなたは新しい参照を割り当てていますが、そうではありません。rootそれが残っている理由nullです。

于 2013-05-07T07:31:32.097 に答える
3

getLeft()そしていつか戻ることがgetRight() できます(そして戻るでしょう)nullprintChild()それleaf自体が ではないことを確認する必要がありますnull。(あなたはおそらくNPEを取得しているif(leaf.left != null)ので、)、ツリー構造をもう一度再考したいかもしれません。あなたの場合です。leafnullrootnull

于 2013-05-07T07:29:29.953 に答える