判断二叉树是否是完全二叉树c语言_C++:一起学习树结构;完美二叉树、完全二叉树、完满二叉树?...

线性结构

小编前面文章中有讲到的数组和链表属于逻辑上一对一的关系,在物理关系上,数据都是线性的。即,可以通过一根线(不管是直线还是曲线)将所有的数据串起来,所以称这种数据结构为线性表,如图:

0ead4888da020de922b201193d06f286.png

线性表

与线性结构相反,树结构就是一对多的关系。即一个数据元素可能与另外多个数据元素有关系。就像大树一样。每一个枝桠,都会分支出许多树枝。如下图,数据A,与B、C、D三个元素有关系。数据B又同时与E、F。该数据结构看起来就像一颗倒过来的大树,所以称这种数据结构为树结构;

02d4f3ce6d7e40df54d89fe31178ff31.png

树结构

树的一些概念

节点:

树中的每一个元素都称为节点。

父节点、子节点、兄弟节点:

如上图,对B、C、D来说,A就是他们的父节点也叫双亲节点。相应的,对A来说B、C、D就是A的子节点,而B、C、D本身互相是平级的,共父节点,所以它们就是互为兄弟节点。

根节点:没有父节点的节点就是整个数的根节点。

子树:任何没有子节点的单个节点或者节点与其下属所有节点都可以是树的子树。如:以B为根节点的B、E、F、K、L即为树的子树。K、L、M任意一个也都能称为树的子树。

空树:没有任何节点的树称为空树。

度和层次

度:对于每个节点,它下面有几个分支就说该节点的度是多少。层次:如上图树,A为第一层,B、C、D为第二层,以此类推

深度:树的深度就是最大层数

376aac9613fff69b17a2f2776f0609fb.png

有序树、无序树和森林

如果从左至由,节点的排序有规律,则称树为有序树,否则就是无序树。

很多树组成的集合就是森林,但是有一个条件就是各树不能有相交。如上图,B、C、D为根节点的子树就可以组成一个森林。

二叉树(Binary Tree)

什么是二叉数?二叉树必须同时具备下面两个条件:

树本身需要是有序树;树中各节点的度不能超过2,但是能小于或等于2,即0,1,2都可以;
1db5d396bbdc86526964ba3ac40cbecd.png

如上图,只有a是二叉树,b不是,因为1这个节点的度为3,超过2了,所以不是二叉树。

满二叉树

除了叶子节点(及最后一层的节点)外,所有的节点的度都为2,不能少于2,那么我们称这个树为满二叉树。如上图中a树即为一个满二叉树,满二叉树也叫完美二叉树。

完全二叉树

先看两张图:

3bfbbc787d6ee6a86b860c6be1640bb6.png

如上图,只有a为完全二叉树,b不是,因为完全二叉树也需要满足两个条件:

1、在满二叉树的基础上,最后一层节点可以不填满

2、但是最后一层所有的节点都需要靠左排列

上图b,因为最后一层节点不是靠左排列,所以不是完全二叉树;

完满二叉树

还有一种树叫完满二叉树,叫起来是不是很拗口呢?完满二叉树是只要一个节点有子节点,那么该节点的度就一定为2的树就是完满二叉树。

满二叉树(完美二叉树)、完全二叉树、完满二叉树对比

c65f6fa729faeafc4a07d4c83a5759a5.png

各种二叉树对比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值