在优快云的帖子上看到关于用递归判定完全二叉树的帖子,相了想觉得有点问题,于是写了下来。
算法如下:
======================================================================
数构好久没翻了。如果我对完全二叉树定义理解没错,下面的实现可以吧?
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
上面这颗树用递归判定会是二叉树。但是其实不是。