首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >平衡()二叉树

平衡()二叉树
EN

Stack Overflow用户
提问于 2011-05-01 01:34:53
回答 4查看 1.1K关注 0票数 0

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

代码语言:javascript
复制
// 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;           
}

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

EN

回答 4

Stack Overflow用户

发布于 2011-05-01 01:41:39

由于return;语句的缘故,这个方法甚至不能编译--您需要返回一个int。

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

一旦你弄清楚了,假设你的根只有一个左子树(root.right == null),并且你知道左子树的高度。整个树的高度应该是多少?

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

现在,如果两者都有呢?

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

票数 1
EN

Stack Overflow用户

发布于 2011-05-01 01:42:06

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

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

票数 1
EN

Stack Overflow用户

发布于 2011-05-01 01:42:23

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5843484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档