【发布时间】:2014-11-29 21:27:05
【问题描述】:
我正在处理一个 BST,我想编写一个函数来检查所有叶子是否都在同一级别终止。
我的第一个想法是获取左右子树的高度并查看它们是否相等,但是我意识到这是一种错误的方法,因为我可以有一个场景,即 root 的右孩子可以为 null 并且左子树上的叶子在同一层终止。
现在我有点迷失如何解决这个问题。
我的代码
int isCompleteBst(struct tree *t)
{
if(t->root == NULL)
{
return 0;
}
else
{
return isCompleteBst_r(t->root);
}
}
int isCompleteBst_r(struct leaf *lf)
{
if(geHeight(lf->left) == getHeight(lf->right))
{
return 1;
}
else
{
return 0;
}
}
【问题讨论】:
-
那么你对这个反例的预期输出是什么?
-
在这种情况下,我的逻辑将返回 0(false) 但是我应该得到 1(true)
-
你不能只写一个递归算法吗?你的数据结构是什么样的?你有第一次尝试的示例代码吗?您能否编辑您的问题并添加这两个部分。
-
@Soren 我发布了我拥有的代码,但不幸的是这是一个错误的方法..
-
@user2733436 -- 递归应该为每个子树做出部分决定,然后将信息向上传递 -- 请参阅我在下面提供的答案
标签: c binary-tree binary-search-tree