在优快云的帖子上看到关于用递归判定完全二叉树的帖子,相了想觉得有点问题,于是写了下来。
算法如下:
======================================================================
数构好久没翻了。如果我对完全二叉树定义理解没错,下面的实现可以吧?
int check (struct bt *root)
{
if (root == NULL)
return 0;
if (root->ltree == NULL && root->rtree == NULL)
return 1;
if (root->ltree == NULL && root->rtree != NULL
|| root->ltree != NULL && root->rtree == NULL)
return 0;
return check (root->ltree) & check (root->rtree);
}
===========================================================
我觉得这样判定是不对的,应该结合子树的层次来判定,因为子树是完全二叉树,不能保证整个二叉树是完全二叉树,
1
/ /
2 3
/ /
4 5
/ / / /
6 7 8 9
上面这颗树用递归判定会是二叉树。但是其实不是。
本文探讨了一种使用递归方法判断二叉树是否为完全二叉树的算法,并指出该方法存在的问题。通过一个具体的例子说明了仅依赖子树的完全性无法确保整棵树的完全性。
2934

被折叠的 条评论
为什么被折叠?



