【问题标题】:inserting in binary tree doesn't work using java使用java插入二叉树不起作用
【发布时间】:2018-10-16 01:33:09
【问题描述】:

我目前正在使用 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);
    }
}

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

【问题讨论】:

  • ..因为,您永远不会分配 root(与null 不同的东西),请在add 方法中执行(可能是最佳设计):if (root == null) { root = insertNode(root, d); } else { insertNode(root, d); }

标签: java search data-structures tree binary


【解决方案1】:

代码很好,但递归不会更进一步

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

并且初始根没有更新:

root = insertNode(root, d);

else 部分或最终返回是多余的。


关于代码风格的东西

insertNode 有一个节点作为输入,并返回更新后的节点值,因此调用“模式”应该是这样的

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

这是因为java永远不能给传递的参数表达式赋值:它没有按引用传递,而是按值传递; f(x) 从不分配给x

【讨论】:

    【解决方案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

    【讨论】:

    • "root = 裸体;"应该是“root = node;” xD不错的一个
    猜你喜欢
    • 2016-01-21
    • 1970-01-01
    • 2016-05-09
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多