【发布时间】:2013-09-25 16:38:22
【问题描述】:
我刚刚了解了二叉树,并尝试创建一个插入方法。我的第一种方法不起作用,我做了一些调整。现在可以了,但我不明白为什么以前的方法失败了。
不起作用的方法是:
if(root == null)
{
root = new Node(data);
}
else if(data < root.getData())
{
insertNode(root.getLeft(), data);
}
else
{
insertNode(root.getRight(), data);
}
有效的方法是:
if(data < root.getData())
{
if(root.getLeft() == null)
{
root.left = new Node(data);
}
else
{
insertNode(root.getLeft(), data);
}
}
else
{
if(root.getRight() == null)
{
root.right = new Node(data);
}
else
{
insertNode(root.getRight(), data);
}
}
任何解释为什么会这样?因为在我看来,root应该等于root.left,所以将root设置为新Node应该与将root.left/right设置为新Node相同。
【问题讨论】:
-
第二个代码中的异常/问题是什么?我在第二个代码中没有看到 root == null 检查。在这种情况下,您不能插入第一个元素
-
@JohnnyAW:在他调用 insertNode(null, data) 的第一个代码中,这是行不通的。但我也需要一些时间才能得到它^^
-
@user2776326 我认为您的第二个代码有问题,因为如果 root 为空,那么它将如何与数据进行比较?
-
@ManuelM。我读错了,我认为第二个代码是错误的:) 但是你仍然不能在第二个代码中插入第一个元素:)
-
不,你不能在第二个代码中添加根节点;-)
标签: java oop recursion binary-tree