首页新闻找找看学习计划

递归判断完全二叉树

0
[已解决问题] 解决于 2015-12-01 18:40

完全二叉树的定义是只有最后一行可以不是满的,这一行的所有节点均是从左往右放置的。

现在大部分算法都是BFS的层次遍历,有没有递归的方法的呢?

现在找到的比较接近的递归算法是这样的

 1 bool isFullTree(tree *T)
 2 {
 3     if(T!==NULL){
 4         if(T->rchild!=NULL&&T->lchild==NULL)
 5             return false;
 6         isFullTree(T->lchild);
 7         isFullTree(T->rchild);
 8     } 
 9     return true;
10 }      

但是这里的有一个反例,如果是一个深度为3的二叉树,最后一行的2个节点全部在右侧,左侧那棵树在最后一行没有节点的时候,这个算法依旧会判断为完全二叉树。

求解如何修正。

sean10的主页 sean10 | 菜鸟二级 | 园豆:206
提问于:2015-11-29 18:19
< >
分享
最佳答案
0

哪有什么2个节点全在右侧?

奖励园豆:5
吴瑞祥 | 高人七级 |园豆:28736 | 2015-11-30 09:53

深度为3的二叉树,第三行不是可以有四个叶子节点吗,然后这行只有右边子树有2个叶子节点,左边没有,用这个算法也会判断成完全二叉树。

sean10 | 园豆:206 (菜鸟二级) | 2015-11-30 12:36

@sean10: 

1 1-1  1-2  1-1-1  1-1-2  1-2-1 1-2-2  你说情况是,1-1有子节点1-2有值但没有子节点?

上面的递归算法没有最后一层的逻辑。他判断的只是左右情况,而算法要求是实现最后一层的左右情况

如果不是最后一层,需要验证左右都有值,你要改的话就加一个判断下层的逻辑,

吴瑞祥 | 园豆:28736 (高人七级) | 2015-11-30 13:48

@吴瑞祥: 不是,不过我想了一下,确实递归不能实现,完全二叉树的结构就不是分形的,需要判断层次,那就不是纯递归了。谢谢~

sean10 | 园豆:206 (菜鸟二级) | 2015-12-01 18:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册