数据结构之树

来源:互联网 发布:搭建局域网网络硬盘 编辑:程序博客网 时间:2024/05/20 20:21

1.树是什么?
树是n个结点组成的一种非线性结构。

2.树的属性:
(1)父母、孩子和兄弟结点:
结点的前驱结点称为父母结点,后继结点是孩子,相同父母结点的结点称为兄弟。

(2)度:
结点的度指的是拥有子树的数量。叶子结点的度为0,树的度是结点的度的最大值。

(3)结点层次,树的高度:
结点的层次指的是结点处于树的层次位置,根节点的层次为1,依次增加。树的高度或深度是树中结点的最大层次树。

(4)边,路径
举例:A,B结点之间的边是(A,B)。
A,到E的路径是(A,B,E),路径长度是2。

(5)无序树和有序树
结点之间可以交换顺序的称为无序树,结点之间不可以交换位置的称为有序树。

(6)森林
是n棵不相交的树的集合。

3.二叉树
(1)什么是二叉树?
二叉树是由一个根节点和最多两个左右不相交的子树组成的。二叉树的度最大是2。

(2)二叉树的性质
a.若根节点的层次为1,则第n层最多有2的(n-1)次方个结点。
b.在高度为h的二叉树中,最多有2的h次方减1个结点。
c.若一棵二叉树的叶子结点数为a,2度结点数为b,则a = b+1。
d.一棵具有n个结点的完全二叉树的高度是
这里写图片描述
e.一棵具有n个结点的完全二叉树,对序号为0(包括)到n之间的结点有:
若i=0,则i为根节点,若i>0,则i的父母结点序号是[(i-1)/2]。

(3)二叉树的遍历规则
a.先根遍历:根节点=>左结点=>右节点
b.中根遍历:左结点=>根节点=>右节点
c.后根遍历:左结点=>右节点=>根节点
d层次遍历:遍历过程从根节点开始,逐层深入,从左到右依次访问完当前层所有结点,再访问下一层。二叉树的层次遍历的特点是兄弟优先。

(4)完全二叉树和满二叉树
满二叉树是高度为h具有2的h次方减1个结点的二叉树。一棵具有n个结点高度为h的二叉树,如果它的每个结点都与高度为h的满二叉树中序号为0~n-1的结点一一对应,则称这棵树为完全二叉树。

(5)二叉树的存储结构
I:链式存储结构:包括二叉链表和三叉链表

第一种:二叉链表
这里写图片描述

第二种:三叉链表
这里写图片描述

II:顺序存储结构
仅适用于完全二叉树和满二叉树,将一棵完全二叉树的所有结点按结点序号进行顺序存储。顺序存储结构依靠数组元素的相邻位置反映数据的逻辑结构,因此顺序存储结构能够存储完全二叉树。

这里写图片描述

这里写图片描述

这里写图片描述

4.线索二叉树
在二叉树的二叉链表表示中,若结点的子树为空,则指向孩子的链为空值。具有n个结点的二叉树,其中n-1条链表达各结点间的关系,n+1条链为空。线索二叉树利用这些空链存储结点在某种次序下的前驱和后继关系。也就是非空的链保持不变,仍然指向该结点的左右孩子结点,使空的left域指向前驱结点,使空的right域指向后继结点。指向前驱或后继结点的链称为线索,对二叉树以某种次序进行遍历并加上线索的过程称为线索化。
这里写图片描述

5.Huffman编码和Huffman树
(1)Huffman编码:是数据压缩技术中的一种无损压缩方法。数据压缩技术通过重新编码将数据进行压缩存储,从而减少数据占用的存储空间。使用时,再进行解压缩。压缩方法主要有无损压缩和有损压缩。无损压缩的原理是统计被压缩数据中重复数据的出现次数来进行编码。无损压缩能确保解压后的数据不失真。

(2)Huffman编码的实现步骤:
a.统计原始数据中各信源符号出现的频率,按频率高低的次序排列。
b.将两个最小的频率相加,作为新信源符号的频率。
c.重复上两步,直到和为1;在每次合并信源符号时,将合并的信源符号分别赋0和1。
d.寻找频率为1处到各个信源符号的路径,记录下路径上的0和1,从而得到每个信源符号的编码,也保证了原始数据中的大部分信源符号由较短编码组成,实现压缩。

(3)Huffman树:
a.二叉树的外路径长度:一棵二叉树,从根节点到所有叶子结点的路径长度之和。
b.二叉树的路径长度:从根结点到所有结点的路径长度之和。
c.表示编码的二叉树只有二度结点和叶子结点,没有一度结点。

这里写图片描述

d.权:在字符的使用概率各不相同的情况下,将字符的使用概率作为二叉树中叶子结点的值。
e.带权路径长度:从根到X结点的带权路径长度是X结点的权值与从根到X结点路径长度的乘积。
f:带权外路径长度:所有叶子结点的带权路径长度之和。
这里写图片描述
g.最优二叉树:Huffman树定义为带权外路径长度最短的二叉树(使权值越大的叶子结点越靠近根节点)。

6.树的遍历
树主要有两种遍历规则:先根次序遍历和后根次序遍历。
树的遍历规则也是递归的。
(1)树的先根遍历规则:
访问根节点–>按照从左到右的次序遍历根的每一棵子树
(2)树的后根遍历规则:
按照从左到右的次序遍历根的每一棵子树–>访问根节点
这里写图片描述

原创粉丝点击