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。全局变量和递归不可避免地会导致疯狂。我认为你在理解递归方面有问题。。。尝试在根节点上模拟递归调用,从树的底部开始。