【发布时间】: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