数据结构—树

一、树的基本概念

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、哈夫曼编码
哈夫曼编码哈夫曼编码哈夫曼编码
哈夫曼编码
哈夫曼编码

转载于:https://my.oschina.net/devbird/blog/831628

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值