树的定义
树Tree:n(n>=0)个结点的有限集合。
空树:结点n=0时的树。
子树:当n>1时其余结点可以 分为m(m>0)个互不相交的有限集合T1,T2…Tm,其中每个集合本身都是一棵树又叫根节点的子树。
有序树:从逻辑上看树中结点的各子树从左至右是有次序的不能互换的树。
无序树:从逻辑上看树中结点的各子树从左至右是无次序的是可以互换的树。
森林是m(m>=0)棵互不相交的树的集合。
空森林是m=0时的树。
结点的分类:
根结点:任意一棵非空树都应满足有且只有一个根结点,除了根结点之外任何结点有且只有一个前驱,所有结点都有0或多个后继。
分支结点:有后继的结点。
终端结点(叶子结点):没有后继的结点。
结点之间的关系: 祖先结点、子孙结点、父结点(直接前驱),孩子结点(直接后继),兄弟结点,堂兄弟结点。
结点之间的路径(从上往下)及路径长度(边的个数)。
结点与树之间的关系:
结点的层次(深度):从上往下数,默认从1开始。
结点的高度:从下往上数。
树的高度(树的深度):指总共多少层 。
结点的度(孩子结点) 是指有几个分支(边的个数)。
树的度是指各个结点的度的最大值 。
树的性质
- 结点数=总度数(总边数)+1
- 度为m的树!=m叉 树。m叉树是指每个结点最多只能有m个孩子的树, 所有结点满足<=m,可以没有最大度m,可以没有最大度m,可以是空树。度为m的树是指必须至少有一个最大度为m的树。
- 度为m的树以及m叉树都最多 在第i层有m的i-1次方个结点(i>=1)
- 高度为h的m叉树 ,至少有h个结点,最多有(m的h次方-1) /(m-1)个结点 。
- 高度为h度为m的树至少有 h+m-1个结点。
- 有n个结点的m叉树的最小高度是[logm(n(m-1)+1)]
6.1二叉树
二叉树的定义(逻辑结构)
二叉树是n(n>=0)个结点的有限集合,二叉树由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一棵二叉树。所有结点满足至多有两棵子树,左右子树不能颠倒,二叉树是有序树。 二叉树是递归定义的数据结构。
二叉树的性质
1、设非空二叉树中度为0、1和2的结点个数分别为n0、n1,和n2, 则
n0=n2+ 1
2、 二叉树第i层至多有2的i-1次方个结点
3、高度为h的的二叉树最多有2的h次方-1个结点
二叉树的五种基本形态:
- 空二叉树是n=0时的二叉树。
- 只有一个根结点的二叉树。
- 只有左子树。
- 只有右子树。
- 完全二叉树是指当且仅当其每个结点都与高度为h的满二叉树 中编号为1~n的结点一一对应时,称为完全二叉树。 只有最后两层可能有叶子结点最多只存在一个度为1的结点。 按层序为1开始编号,结点i的左孩子为2i ,右孩子为2i+1,结点的父节点为i/2,i<=(n/2)为分支节点,i>(n/2)为叶子结点。某结点只有一个孩子时这一定是左孩子 。
二叉树的特殊类型:
-
满二叉树是指高度为h的满二叉树含有2的h次方-1个结点。 只有最后一层有叶子结点,不存在度为1的结点。按层序为1开始编号,结点i的左孩子为2i ,右孩子为2i+1,结点的父节点为i/2
-
二叉排序树 又称为二叉查找树(可理解为从上面三个结点具有特殊性左小右大), 左子树上所有结点的关键字均小于根结点的关键字,右子树上所有结点的关键字均大于根结点的关键字,左子树和右子树又各是一棵二叉排序树。
-
平衡二叉树是指树上任一结点的左子树和右子树的深度之差不超过1的二叉树。
-
哈夫曼树(最优二叉树):在含有n个带权叶结点的二叉树中,其中带权路径长度(WwPL)最小的二叉树。
结点的权:有某种现实含义的数值。
结点的带权路径长度:从树的根到该结的路径长度(经过的边数)与该结点的权的乘积。
树的带权路径长度WPL:树中所有叶结点的带权路径长度之和。哈夫曼树的特点:
1)每个初始结点最终都成为叶结点,且权值越小的结点到根结点的路径长度越大
2)哈夫曼树的结点总数为2n -1
3)哈夫曼树中不存在度为1的结点.
4)哈夫曼树并不唯一,但wPL必然相同且为最优哈夫曼编码: 固定长度编码――每个字符用相等长度的二进制位表示。 可变长度编码――允许对不同字符用不等长的二进制位表示。 若没有一个编码是另一个编码的前缀,则称这样的编码为前缀编码。由哈夫曼树得到哈夫曼编码―-字符集中的每个字符作为一个叶子结点,各个字符出现的频度作为结点的权值,根据之前介绍的方法构造哈天曼树。哈夫曼树不唯一,因此哈夫曼编码不唯一 。