Java 平衡()二叉树

Java 平衡()二叉树,java,binary-tree,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++

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

// 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;           
}
这是我计算树的最大高度的代码。 但我不知道如何确定左右两侧的高度,
这个方法似乎可以计算树本身的节点数量。

这个方法甚至不会编译,因为
返回语句-您需要返回一个int

所以,
如果(x==null)
,您应该返回什么?一棵空树有多高

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

如果它只有一个正确的子树呢

现在,如果两者都有呢

请注意,这一切都不需要全局计数变量。

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


你应该返回一个值,而不是设置一个变量(在你的例子中是count),否则你会发疯。

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

除了提示之外,我还将指出你真的想使用递归。

是的,我知道。但这就是为什么我没有要求有洞平衡的树,只是高度和如何从秃顶树开始的概念。为什么我的代码出来的如此之快?请看ok初学者错误的第一个返回值。如果在那里更改了我的代码,但我不明白的是left.height()和right.height()将只返回0。如果a不等于1,它们怎么能返回值呢?但我不明白的是left.height()和right.height()只返回0。如果a不等于1,他们怎么能返回一个值呢?因为当a到达一个绝对正确的变量时,我说返回0。全局变量和递归不可避免地会导致疯狂。我认为你在理解递归方面有问题。。。尝试在根节点上模拟递归调用,从树的底部开始。