插入二叉树并不能使用java

时间:2018-05-05 20:54:32

标签: java search data-structures tree binary

我目前正在使用java学习树木 我在这里发生了一些错误 在二叉树中插入项目 我不知道为什么它不起作用

这是代码: 树节点:

public class TNode {
    int data;
    TNode left;
    TNode right;

    public TNode(int data) {
        this.data = data;
        left = null;
        right = null;
    }
}

树类:

public class Tree {
    TNode root;

    public Tree(){
        root = null;
    }

    public TNode insertNode(TNode item, int d) {
        if (item == null) {
            return new TNode(d);
        }

         if (d < item.data) {
            item.left = insertNode(item, d);
        }

        if (d > item.data) {
            item.right = insertNode(item, d);
        } else {
            return item;
        }

        return item;
    }

    public void add(int d) {
        insertNode(root, d);
    }
}

每当我添加一个项目时,根保持为null,没有右边或左边的项目 如果有人可以提供帮助,我会非常感激

2 个答案:

答案 0 :(得分:2)

root始终为null,因为您从不为其赋值。

您可以添加到方法检查的开头并分配

public TNode insertNode(TNode item, int d){
    if(item == null){
        TNode node = new TNode(d);
        if (root == null) { 
            root = node;
        }
        return node
    }
    ... rest of method isn't changed...

此外,当您进行递归时,您应该使用正确的子节点进行呼叫,而不是始终使用item进行呼叫,因此例如,第一种情况是:

    item.left = insertNode(item.left, d);

对于第二种情况,您只需使用item.right

答案 1 :(得分:1)

精细代码,但递归不再进一步

item.left = insertNode(item.left, d);
item.right = insertNode(item.right, d);

初始根未更新:

root = insertNode(root, d);

其他部分或最终回报是多余的。

代码风格

insertNode有一个节点作为输入,并返回更新的节点值,因此调用“pattern”应该看起来像

X = insertNode(X, d); // X is some expression

这是因为java永远不能分配给传递的参数表达式:它没有pass-by-reference,而是pass-by-value; f(x)永远不会分配给x