我需要编写一个方法来确定二叉树是否平衡。所以首先我要确定树的每一边的高度。但是我无法理解如何计算子树的最大长度,而不计算子树中的所有节点。这个问题很难问我,所以你们都可以理解。
// primary method
public int Height()
{
int h = height( root );
}
// recursive method
private int height( Node x )
{
if( x == null ) return 0;
count++;
height( x.left );
height( x.right );
return count;
}
这是我计算树的最大高度的代码。 但我不知道如何确定左侧或右侧的高度, 并且此方法似乎计算树本身中的节点数量。
答案 0 :(得分:1)
由于return;
语句,此方法甚至不会编译 - 您需要返回一个int。
那么,if(x == null)
,你应该回归什么?空树的高度是多少?
一旦你弄明白了,想象你的根只有一个左子树(root.right == null
),你知道左子树的高度。整棵树的高度应该是多少?
如果它只有一个正确的子树怎么办?
现在,如果两者兼而有之?
请注意,您不需要任何全局计数变量。
答案 1 :(得分:1)
高度为1 + max(left.height(),right.height())。
你应该返回一个值,而不是设置一个变量(在你的情况下是计数),否则你会生气。
答案 2 :(得分:0)
节点的高度比其最高子节点的高度高一个(提示:使用Math.max
)。
答案 3 :(得分:0)
添加提示我还会指出你真的想要使用递归。