一、树的基本概念
1、树的概念
树(Tree)是n(n>=0)个节点的有限集。n=0时称为空树。在任意一棵非空树中:①有且仅有一个特定的称为根(Root)的借点;②当n>1时,其余节点可分为m(m>0)个互不相交的有限集,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。
2、节点的度
结点拥有的子树数称为结点的度。度为0的结点称为叶子结点或终端结点,度不为0的结点称为非终端结点或分支结点。除根结点以外,分支结点也称为内部结点。树的度是树内各结点的度的最大值。
3、层次与深度
节点的层次从根开始起定义,根为第一层,根的孩子为第二层,后面的依此类推,树中节点的最大层次称为树的深度或高度。
二叉树的基本概念和性质
1、二叉树概念
二叉树(Binary Tree)是n(n>=0)个节点的有限集合,该集合或则为空集(称为空二叉树),或则由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成。
2、满二叉树概念
在一棵二叉树中,如果所有分支节点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。
3、完全二叉树概念
对一棵具有n个节点的二叉树按层序编号,如果编号为i(i>=1 && i<=n)的节点与同样深度的满二叉树中编号为i的节点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。
4、二叉树的性质
性质3证明:
设n为总结点数,n1为度为1的结点数,n2为度为2的结点数,n0为终端结点数。用代数表达就是分支总数=n-1=n1+2n2,因为刚才有等式n=n0+n1+n2,所以推导出n0+n1+n2-1=n1+2n2,所以得出结论n0=n2+1。
三、树、森林、二叉树的转换
1、树转换为二叉树
① 加线。在所有兄弟节点之间加一条线。
② 去线。对树中每个节点,只保留它与第一个孩子节点的连线,删除它与其他孩子节点之间的连线。
③ 层次调整。以树的根节点为轴心,将整棵树顺时针旋转一定的角度,使之结构层次分明。注意第一个孩子是二叉树节点的左孩子,兄弟转换过来的孩子是节点的右孩子。
####2、森林转化为二叉树
① 把每棵树转为二叉树
② 第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根节点作为前一棵二叉树的根节点的右孩子,用线连接起来。当所有的二叉树连接起来后就得到了由森林转换来的二叉树。
3、二叉树转换为树
① 加线。若某节点的左孩子节点存在,则将这个左孩子的右孩子节点、右孩子的右孩子节点、右孩子的右孩子的右孩子节点......,即左孩子的n个右孩子节点都作为此节点的右孩子。将该节点与这些右孩子节点用线连接起来。
② 去线。删除原二叉树中所有节点与其右孩子节点的连线。
③ 层次调整。使之层次结构分明。
四、哈夫曼树
给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
1、哈夫曼树基本术语
① 路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长哈夫曼树度为L-1。
② 结点的权及带权路径长度:若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。
③ 树的带权路径长度:树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL。
2、哈夫曼树的构造
####3、哈夫曼编码