目录
树
树:是由N(N≥0)个节点构成的有限集合。其中,N = 0的树叫做空树。
其余结点应满足以下来个条件:
(1)、有且只有一个特点的结点称之为根
(2)、其余结点分成m(m≥0)个互不相交的有限集合,其中每一个集合,又都是一棵树
度
度:结点所拥有的子节点个数
叶子结点
叶子结点:度为0的结点,也叫终端结点
分支结点
分支结点:度不为0的结点,也叫非终端结点、非叶子结点、分支点或内结点。
有序树、无序树
如果一颗树的各子树,从左到右是有次序的,那么这棵树就是有序树;反之就是无序树。
在以下的俩颗树中,若是有序树,这俩颗树是不同的树;若各子树从左到右是无次序的,那么这俩颗树就表示同一颗树。
树结构和线性结构比较
树结构 | 线性结构 |
---|---|
根结点只有一个(无双亲) | 第一个数据元素(没有前驱) |
叶子结点可以有多个(无孩子) | 最后一个数据元素(无后继) |
非叶子结点,一个双亲多个孩子(一对多) | 其他数据元素一个前驱一个后继(一对一) |
树的遍历
从根结点出发,按照某种次序,对树中所有结点进行访问,每个结点必须被访问且仅访问一次。
** 访问方式:**前序遍历、中序遍历、后序遍历
**遍历的实质:**j将二叉树的结点,按照一定的规则排列成一个线性序列,这实质上就是将一个非线性结构进行线性化操作。使得每个结点(除第一个和最后一个结点)都有且仅有一个前驱和一个后继。
前序遍历
先访问根结点,再访问左子树,最后访问右子树。
如图所示:前序遍历首先遍历到根节点,从根节点A开始,开始遍历A的左子树B,结点B继续遍历其左子树D,结点D因为没有孩子结点,返回空结点指针到B,开始遍历B的孩子结点E,再遍历结点E的左孩子H结点,因为H没有孩子结点,然后返回空结点指针到E,结点E继续遍历其右孩子I,因为结点I没有孩子结点,所以返回空结点指针到E,因为结点E的孩子结点都已经访问完毕,于是继续将空指针结点返回到B,结点B的孩子结点只有F没有被访问,于是访问结点F,因为F没有孩子结点,于是将空结点指针返回到A,根结点A开始访问其右孩子结点C,结点C访问其左孩子G,因为结点G没有孩子结点,于是将空结点指针返回。至此,所有结点都已经被访问完毕。
前序遍历结果:A B D E H I F C G
中序遍历
先访问左子树,再访问根节点,最后访问右子树
中序遍历结果:B D H E F A G C
后续遍历
先访问左子树,再访问右子树,最后访问根节点
后序遍历结果:D H I E F B G C A
层次遍历
二叉树的层次遍历:是指从二叉树的第一层(根结点)开始,从上到下逐层遍历,在同一层中从左到右访问。
层次遍历结果:A B C D F G E
二叉树
二叉树:二叉树不是一般树形结构的特殊形式。
二叉树的结点个数最多为2,而且严格区分左右孩子结点。
二叉树的形式
斜树
如图:像这样的二叉树,叫做斜树。
所有结点只有左子树的斜树,叫做左斜树;
所有结点只有右子树的斜树,叫做右斜树。
斜树的特点:
(1)、斜树的所有结点只有一个孩子
(2)、斜树的结点个数,也就是该二叉树的深度
完美二叉树
在一个二叉树中,所有终端结点位于同一层次,其他非终端结点度数为2,这样的二叉树叫做完美二叉树,或满二叉树。
完美二叉树特点:
(1)、叶子结点在最下一层
(2)、只有度为0和度为2的结点
完全二叉树
在一颗深度为K的n个结点的二叉树中,当且仅当该n个结点的二叉树与满二叉树中连续编号为i(1≦ i ≦ n)的结点位置一一对应,这样的二叉树叫做完全二叉树。
第10号结点J刚好与满二叉树第10号结点J对应。
像下面这颗树,它就不是完全二叉树
完全二叉树特点
1、完全二叉树叶子结点只能出现在最下俩层,且最下一层叶子结点都集中在左面。
2、完全二叉树中,有且只有一个结点它的度为1,且它的孩子结点,只能是左孩子。
3、在深度为k的完全二叉树中,k-1层一定是满二叉树。
4、在同样结点的二叉树中,完全二叉树的深度最小
二叉树的存储结构
线性表的顺序存储结构
将编号第一个置空,这样下标就与结点树相匹配
但是,有的时候,选择顺序存储会很浪费内存,比如:
此时,将顺序存储结构,换位链式存储结构,会更加方便。
链式存储特点:有三个域,一个数据域,俩个分别指向左右孩子的指针域。
线索二叉树
线索二叉树:是在一般二叉树的基础上,对每个结点进行考察。
(1)、若其左子树非空,则其左指针指向不变,仍指向其左孩子;若左子树为空,则左指针指向某种遍历顺序下的前驱
(2)、若其右子树非空,则其右指针指向不变,仍指向其右孩子;若右子树为空,则右指针指向某种遍历顺序下的后继
遍历顺序:
①、若规定遍历顺序为前序遍历,则称为前序线索二叉树
②、若规定遍历顺序为中序遍历,则称为中序线索二叉树
③、若规定遍历顺序为后序遍历,则称为后序线索二叉树
哈夫曼树
给定N个权值构造有N个叶子结点的二叉树,这样的二叉树获取可以构造多个,但这些二叉树中必有一个带权路径长度最小的一个,那么这个二叉树就是哈夫曼树或最优二叉树。
举个例子:
哈夫曼树特点
(1)、权值越大的结点,越靠近根结点;权值越小的结点,越远离根节点。
(2)、哈夫曼树中,只有度为0(叶子结点)的结点和度为2(分支结点)的结点,没有度为1的结点。
(3)、总结点个数为2n - 1