我正在处理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 :(得分:0)
首先获取任何一片叶子的深度并存储它。它将用于比较。
然后通过树递归:
如果您发现两个子节点都有效的节点,请继续递归。
如果您点击左右子节点为NULL的节点,则会找到叶子,将当前深度与存储的深度进行比较。如果它不匹配则停止递归并返回false。否则继续左右儿童的递归。
如果你点击一个有一个子NULL和一个有效的节点,则停止递归,因为深度显然不匹配,并返回false。
如果您从未遇到错误情况,请默认返回true。