【发布时间】:2014-05-02 04:48:28
【问题描述】:
我知道这是非常简单的代码,但想知道内部工作的具体情况。
public static int getHeight(TreeNode root) {
if (root == null) {
return 0;
}
System.out.print(getHeight(root.left) +"\t");
return Math.max(getHeight(root.left), getHeight(root.right)) + 1;
}
据我了解,我添加了 print 语句,但结果如下。
打印 root.left() 会打印:0 0 0 1 0 0 0
打印 root.right() 打印:0 0 2 0 0 3 0 0 2 0 0 0 1 0
以下是主程序中创建的树:
TreeNode parent = new TreeNode(10);
parent.insertInOrder(2);
parent.insertInOrder(13);
parent.insertInOrder(5);
parent.insertInOrder(6);
parent.insertInOrder(15);
parent.insertInOrder(6);
如何打印上述结果以及它是如何工作的。如果有人能用上面的例子解释我,那真的对我有帮助。
我知道遍历是如何工作的以及如何打印树,但我真的很想了解上面的输出。如果有人可以提供帮助,那就太好了。
void setLeftChild(TreeNode left)
{
this.left = left;
if(left == null)
{
left.parent = this;
}
}
void setRightChild(TreeNode right)
{
this.right = right;
if(right == null)
{
right.parent = this;
}
}
void insertInOrder(int d)
{
if(d <= data)
{
if(left == null)
{
setLeftChild(new TreeNode(d));
}
else
{
left.insertInOrder(d);
}
}
else{
if(right == null)
{
setRightChild(new TreeNode(d));
}
else{
right.insertInOrder(d);
}
}
size++;
}
【问题讨论】:
-
树平衡了吗?
insertInOrder是如何工作的? -
size是全局变量吗?你在这里做任何平衡还是不平衡的bst?作为旁注,使用迭代代码进行插入。如果可以的话,尽量避免递归。他们很慢。 -
我正在尝试平衡 bst 和 size isnt global
-
平衡的代码的哪一部分?如果大小不是全局的,它的值将如何在递归调用中传播。您必须将它作为参数传递给递归函数。
-
我的问题与您的问题并不完全相关。其余代码没有问题
标签: java algorithm data-structures tree binary-search-tree