【问题标题】:Recursive BST Insert Not Setting Root Java递归 BST 插入未设置根 Java
【发布时间】:2016-01-29 22:13:53
【问题描述】:

根始终为空。

这不是作业,只是想扩展我的知识。我正在尝试将节点递归地插入二叉树。我在这里做了一些搜索,但每个实现都如此不同,这些更改不起作用。

这是我的 BinaryTree 类:

public class BinaryTree {

    static Node root;

    public static void insertNode(int data){

        if(root != null){

            root.printData();
            insertNew(root, new Node(data));

        }else{

            root = insertNew(root, new Node(data));

        }

    }


    private static Node insertNew(Node current, Node n){


        if(current == null){

            return n;


        }else if(current.data > n.data){

            current.left = insertNew(current.left, n);
            return current;

        }else if(current.data < n.data){

            current.right = insertNew(current.right, n);
            return current;
        }

        return current;

    }

    public static void main(String[] args){


        insertNode(9);

    }


}

这是我的节点:

class Node {

    int data;
    Node left;
    Node right;

    Node(int data){

        this.data = data;

    }

    public int printData(){

        System.out.println(this.data);
        return this.data;
    }
}

每次我运行它时,它都假定根为空。我的工作代码中有调试打印行,所以我可以知道我在方法中的位置。它每次都会在insertNew() 函数中命中第一个if

我想从概念上了解我失败的地方。

【问题讨论】:

  • @ChiefTwoPencils 更多的是为了知识。我进行检查以确保 root 具有值。这就是为什么它永远不会杀死我的原因。在第一次调用 insertNode() 之后,root 应该总是有一个值。
  • @Phoenix 这在我运行时有效。但是,您确实需要在根不是null 之前插入另一个节点。例如,将 insertNode(10) 添加到您的 main 方法中。 Java 不会在运行之间保存值或数据结构。
  • 好的,我现在明白了。也许我对树的了解还不够。那么我是否无法在一次执行中添加 10 个节点,然后在另一次执行中遍历树?树只在单次执行期间保留在内存中?
  • @Phoenix 这是理解 Java 的问题。每次执行都是完全独立的。除非您将其存储在更永久的位置,例如计算机上的文件,否则绝对不会将任何内容从一次执行转移到下一次执行。
  • 这不仅仅是关于树木。每次运行程序时,它都会初始化 RAM 中所有必需的变量和结构。程序完成后,所有数据都消失了。此外,垃圾收集器会清除所有没有指向它的内存,数据也会被擦除。要保存数据,程序应将其写入某处(驱动器或数据库)。然后程序重启后数据变为红色。

标签: java null binary-search-tree root


【解决方案1】:

您可能不知道每次运行程序时,它都会从头开始初始化 RAM 中的所有数据? 在另一种情况下,您的错误可能是您认为 root.data 将在第一次插入后打印。您应该至少进行 2 次插入,以使您的代码打印一些内容,因为在第一次插入时,根始终为空。

如果尝试调试,您​​可以很容易地发现问题:

【讨论】:

  • 感谢您的回答,看来我只是不明白Java是如何将对象保存在内存中的,对于学术界以外的BST的实际应用,我仍然有些模糊。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 2018-03-25
  • 2017-10-03
  • 2021-10-03
  • 2021-12-11
  • 2020-11-18
相关资源
最近更新 更多