如何判断二叉树是满二叉树?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何判断二叉树是满二叉树?相关的知识,希望对你有一定的参考价值。

满二叉树的判断方法:

除最后一层无任何子节点外,每一层上的所有结点都有两个子结点(最后一层上的无子结点的结点为叶子结点)。也可以这样理解,除叶子结点外的所有结点均有两个子结点。节点数达到最大值。所有叶子结点必须在同一层上。




结点(如果一颗树深度为h,最大层数为k):

1、它的叶子数是: 2^(h-1);

2、第k层的结点数是: 2^(k-1);

3、总结点数是: 2^k-1 (2的k次方减一);

4、总节点数一定是奇数。



参考技术A 完全二叉树的定义:深度为k,有n个结点的二叉树当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时,称为完全二叉树。
特点:叶子结点只可能在层次最大的两层上出现;对任一结点,若其右分支下子孙的最大层次为l,则其左分支下子孙的最大层次必为l 或l+1

满二叉树:一棵深度为k,且有2的(k)次方-1个节点的二叉树
特点:每一层上的结点数都是最大结点数

最简单的就是: 求出二叉树的深度。。。和节点的总个数。。。然后满足公式就行了。。。
层次书和 节点总个数 满足 1+2+4+8+ 2的层次次方= 节点总个数。。就行了呗。。
参考技术B 完全二叉树的定义:深度为k,有n个结点的二叉树当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时,称为完全二叉树。
特点:叶子结点只可能在层次最大的两层上出现;对任一结点,若其右分支下子孙的最大层次为l,则其左分支下子孙的最大层次必为l 或l+1

满二叉树:一棵深度为k,且有2的(k)次方-1个节点的二叉树
特点:每一层上的结点数都是最大结点数

最简单的就是: 求出二叉树的深度。。。和节点的总个数。。。然后满足公式就行了。。。
层次书和 节点总个数 满足 1+2+4+8+ 2的层次次方= 节点总个数。。就行了呗。。
参考技术C 全二叉树(Complete Binary Tree): 若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的节点都连续集中在最左边,这就是完全二叉树。

判断很简单,广度优先搜索整个二叉树,一旦找一个不含有子节点或者只含有一个左子节点之后,那么后续的所有节点都必须是叶子节点。否则,该树就不是完全二叉树。

完全二叉树判断,简单而复杂

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

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

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

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

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

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

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

任意的一个二叉树,都可以补成一个满二叉树。这样中间就会有很多空洞。在广度优先遍历的时候,如果是满二叉树,或者完全二叉树,这些空洞是在广度优先的遍历的末尾,所以,但我

以上是关于如何判断二叉树是满二叉树?的主要内容,如果未能解决你的问题,请参考以下文章

判断二叉树是不是为满二叉树 (C++描述)

完全二叉树与满二叉树的区别是啥?

2021-04-14:判断二叉树是否是满二叉树?

java数据结构与算法之判断是否是满二叉树

如何判定一颗树是完全二叉树和满二叉树

关于树的判定(满二叉树完全二叉树平衡二叉树相似二叉树等价二叉树)