概念与结构
在树形结构中,我们最常⽤的就是⼆叉树,⼀棵⼆叉树是结点的⼀个有限集合,该集合由⼀个根结点加上两棵别称为左子树和右子树的⼆叉树组成或者为空。
由此得:
⼆叉树不存在度大于 2 的结点
⼆叉树的子树有左右之分,次序不能颠倒,因此⼆叉树是有序树
特殊的二叉树
满二叉树
一个二叉树,如果每个根结点得子结点都是两个,则这个二叉树就是满二叉树。
换句话说,如果一个二叉树是k层,那他的结点满足2^k − 1,那它就是满二叉树。
公式推导:
观察可得它的每层结点数与层数关系式为:2^(k-1)
那当他有k层时,它的结点总数为:
完全二叉树
完全⼆叉树是效率很⾼的数据结构,完全⼆叉树是由满⼆叉树而引出来的。对于深度为 K 的,有 n 个结点的⼆叉树,当且仅当其每⼀个结点都与深度为K的满⼆叉树中编号从 1 至 n 的结点⼀⼀对应时称之为完全⼆叉树。
满⼆叉树是⼀种特殊的完全二叉树。
上面得术语可能不太好理解,那我们解释一下上面这段话到底说了啥:
他的意思就是假设现在有一个层数为k得二叉树,他除了第k层以外得其他层得结点都是满的,即除了第k层之外得层数结点数都满足2i-1,第k层得结点不一定非要满足2i-1,但是第k层得结点必须满足结点从左到右得排序。
上面这种情况就不是完全二叉树。
二叉树性质:
根据满⼆叉树的特点可知:
1)若规定根结点的层数为 1 ,则⼀棵⾮空⼆叉树的第i层上最多有 2i−1 个结点
2)若规定根结点的层数为 1 ,则深度为 h 的⼆叉树的最大结点数是 2h − 1
3)若规定根结点的层数为 1 ,具有 n 个结点的满⼆叉树的深度 h = log2 (n + 1) ( log以2为底, n+1 为对数)
二叉树存储结构
⼆叉树⼀般可以使⽤两种结构存储,⼀种顺序结构,⼀种链式结构。
顺序结构
顺序结构存储就是使用数组来存储,⼀般使用数组只适合表示完全⼆叉树,因为不是完全⼆叉树会有空间的浪费。
我们通常把堆(⼀种⼆叉树)使⽤顺序结构的数组来存储,需要注意的是这⾥的堆和操作系统虚拟进程地址空间中的堆是两回事,⼀个是数据结构,⼀个是操作系统中管理内存的⼀块区域分段。
链式结构
⼆叉树的链式存储结构是指,用链表来表示⼀棵⼆叉树,即⽤链来指示元素的逻辑关系。 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别⽤来给出该结点左孩⼦和右孩⼦所在的链结点的存储地址 。链式结构⼜分为⼆叉链和三叉链,目前介绍的示初级数据结构,等到高级数据结构里红黑树等会⽤到三叉链。
本篇只是为了对二叉树有一些概念上的了解,所以没什么实操过程。