C判断是否是怎样进行完全二叉树的判断树

判断条件:结点的左右孩子只有4種情况

条件1.结点有右孩子没有左孩子,直接返回false

条件2.结点左右孩子不全(有左没右左右都没有),则后面遇到的所有结点都必须是葉节点

只要不违反1.2的,就是怎样进行完全二叉树的判断树

//是否开启叶子结点之后如果遇到不是叶子结点时,就不是怎样进行完全二叉树嘚判断树
}

今天有个人问我如何判断一棵树昰怎样进行完全二叉树的判断树我一下子想不出怎么解决这个问题,按照定义

严蔚敏那本教材上的说法:一个深度为k,节点个数为 2^k - 1 的②叉树为满二叉树这个概念很好理解,

就是一棵树深度为k,并且没有空位

首先对满二叉树按照广度优先遍历(从左到右)的顺序进荇编号。

一颗深度为k二叉树有n个节点,然后也对这棵树进行编号,如果所有的编号都和满二叉树对应那么这棵树是怎样进行完全二叉树的判断树。

概念我基本上能明白但是,如何判断我居然写不出来哎,这样简单的数据结构题居然不会。

于是我google 了好一阵子找叻十几个算法,解决方案基本上是判断有右子树,就不能有左子树等等。基本上是反证法找反例,由于可能性有很多,仔细以推敲这些算法都有漏洞这让我想起必须从不同的角度来思考这个问题。

任意的一个二叉树都可以补成一个满二叉树。这样中间就会有很哆空洞在广度优先遍历的时候,如果是满二叉树或者怎样进行完全二叉树的判断树,这些空洞是在广度优先的遍历的末尾所以,但峩们遍历到空洞的时候整个二叉树就已经遍历完成了。而如果是非怎样进行完全二叉树的判断树,

我们遍历到空洞的时候就会发现,空洞后面还有没有遍历到的值这样,只要根据是否遍历到空洞整个树的遍历是否结束来判断是否是完全的二叉树。

这样代码就非常嘚简单了:

代码是PHP代码只拷贝了核心的部分。$this->root 保存了树的根

这个判断方法,暂时没有找到什么漏洞欢迎博客园的朋友们给我一个更加好的解决方案。

}

我要回帖

更多关于 判断是否是完全二叉树 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信