找出BST的叶子是否终止于同一水平

时间:2014-11-29 21:27:06

标签: c binary-tree binary-search-tree

我正在处理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;
   }
}

1 个答案:

答案 0 :(得分:0)

首先获取任何一片叶子的深度并存储它。它将用于比较。

然后通过树递归:

如果您发现两个子节点都有效的节点,请继续递归。

如果您点击左右子节点为NULL的节点,则会找到叶子,将当前深度与存储的深度进行比较。如果它不匹配则停止递归并返回false。否则继续左右儿童的递归。

如果你点击一个有一个子NULL和一个有效的节点,则停止递归,因为深度显然不匹配,并返回false。

如果您从未遇到错误情况,请默认返回true。