balanced()二叉树

时间:2011-04-30 17:34:53

标签: java binary-tree

我需要编写一个方法来确定二叉树是否平衡。所以首先我要确定树的每一边的高度。但是我无法理解如何计算子树的最大长度,而不计算子树中的所有节点。这个问题很难问我,所以你们都可以理解。

// 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;           
}

这是我计算树的最大高度的代码。 但我不知道如何确定左侧或右侧的高度, 并且此方法似乎计算树本身中的节点数量。

4 个答案:

答案 0 :(得分:1)

由于return;语句,此方法甚至不会编译 - 您需要返回一个int。

那么,if(x == null),你应该回归什么?空树的高度是多少?

一旦你弄明白了,想象你的根只有一个左子树(root.right == null),你知道左子树的高度。整棵树的高度应该是多少?

如果它只有一个正确的子树怎么办?

现在,如果两者兼而有之?

请注意,您不需要任何全局计数变量。

答案 1 :(得分:1)

高度为1 + max(left.height(),right.height())。

你应该返回一个值,而不是设置一个变量(在你的情况下是计数),否则你会生气。

答案 2 :(得分:0)

节点的高度比其最高子节点的高度高一个(提示:使用Math.max)。

答案 3 :(得分:0)

添加提示我还会指出你真的想要使用递归。