此篇是另一种数据结构类型——树的一个分支,大名鼎鼎的二叉树。
形如上图的数据结构叫做二叉树。
最上面的那个节点A
,叫做根节点
一个节点,有左子树和右子树,两个子树。
如
A
的左子树是BDEH
。而E
的左子树是空(或者称没有左子树),右子树是H
。
一个节点含有的子树的根节点称为该节点的子节点
如
B
是A
的子节点。
如果一个节点有子节点,那该节点称为其子的结点的父节点
如
A
是B C
的父节点。
一个节点含有子树的个数称为该节点的度
A B C
都是度为2的节点,E
是度为1的节点。
度为0的节点称为叶节点
如
D H F G
都是叶节点。
++++++
满二叉树
如果一个二叉树的节点数的层数为 kkk ,每一层节点都满足2k−12^{k-1}2k−1 个,那就是满二叉树
完全二叉树
对于一个有kkk层的二叉树,如果其k−1k-1k−1层是完全二叉树,并且其第kkk层节点是依次从左到右按顺序的,那就是完全二叉树。满二叉树是一种特殊的完全二叉树。
一个二叉树第kkk层,最多有zk−1z^{k-1}zk−1个节点
深度为kkk的满二叉树,一共有2k−12^k-12k−1个节点。
20+21+22+...+2k−1=20∗2k−12−1=2k−12^0 + 2^1 + 2^2 +...+2^{k-1}\\=2^0*\frac{2^k-1}{2-1}\\=2^k-1 20+21+22+...+2k−1=20∗2−12k−1=2k−1
有nnn个节点的满二叉树,它的深度k=log2(n+1)k = log_2(n+1)k=log2(n+1)。
任意一个二叉树,如果叶节点个数为n0n_0n0,度为2的节点有n2n_2n2个,则满足n0=n2+1n_0 = n_2+1n0=n2+1。
用顺序表的结构来存储一个二叉树的数据,是顺序存储~~
对于具有nnn个节点的二叉树,如果按照完全二叉树的结构进行编号,从000开始,到第n−1n-1n−1个 节点,则对序号为iii个节点:
因此可以将二叉树数据存储在顺序表结构中,通过该规律访问来实现二叉树。
堆的实现
可以利用一个双向链表的结构来存储二叉树的数据,也称二叉树的链式结构
通过链表中的左右指针分别对二叉树结点的左孩子和右孩子进行连接,通过指针访问来实现二叉树。
二叉树链式结构的实现