Chapter_05_树和二叉树.ppt

Chapter_05_树和二叉树

知识回顾(10) 线性表 一般的线性表 特殊的线性表:栈、队列 线性表的扩展:数组、广义表 特点: 有序 前趋、后继 第五章 树和二叉树 树的表示法 图形表示法 知识回顾(11) 树的定义 二叉树的定义 二叉树的特性 思考题 1.具有n个结点的完全二叉树中有多少个叶子结点?有多少个度为2的结点? 2.具有n0个叶子结点的完全二叉树中共有多少个结点? 问 题 具有n个结点的非空二叉树的最小深度是多少?最大深度是多少? 思考题 1.具有n个结点的完全二叉树中有多少个叶子结点?有多少个度为2的结点? 2.具有n0个叶子结点的完全二叉树中共有多少个结点? 2n0 or 2n0-1 知识回顾(12) 二叉树的存储 二叉树的遍历 练习 中序遍历序列 后序遍历序列 先序遍历序列 用二叉树表示算术表达式 层次遍历算法(需要利用队列) 遍历算法思想的应用 例1:统计二叉树中叶子结点的个数.(先序遍历) 例2:求二叉树的深度 (后序遍历) 设计递归函数统计二叉树T中的结点数据域等于k的结点数 int count (BiTree *T) { if (T= =NULL) return 0; else { i= count (T-lchild); j= count(T-rchild); if (T-data==k) sum=i+j+1; else sum=i+j; return sum; } 作业 设计算法统计二叉树中结点的个数。 例3:建立二叉树的存储结构 问题 已知一棵二叉树的先序遍历序列,能否得到这棵二叉树? 例:一棵二叉树的先序序列为:1,2,3。请画出这棵二叉树。 已知一棵二叉树的中序序列和后序序列分别是BDCEAFHG 和 DECBHGFA,请画出这棵二叉树。 分析: ①由后序遍历特征,根结点必在后序序列尾部(即A); ②由中序遍历特征,根结点必在其中间,而且其左部必全部是左子树的子孙(即BDCE),其右部必全部是右子树的子孙(即FHG); ③继而,根据后序中的DECB子树可确定B为A的左孩子,根据HGF子串可确定F为A的右孩子;以此类推。 练习 已知一棵二叉树的前序遍历序列和中序遍历序列分别为 ABEFIJDGH和 EBIFJAGDH。 请: (1)画出这棵二叉树;要求写出分析写出过程 (2)写出这棵二叉树的后序遍历序列 问题:能否在遍历过程中把结点的前趋和后继信息保存下来,并且提高算法的效率呢? 线索二叉树的引入和定义 讨论1:二叉树是1:2的非线性结构,如何定义其直接后继? 为区别两种不同情况,特增加两个标志域: 1. 有关线索二叉树的几个术语 例1:带了两个标志的某先序遍历结果如下表所示,请画出对应的二叉树。 例2:画出以下二叉树对应的中序线索二叉树。 例3:给定如图所示二叉树T,请画出与其对应的中序线索二叉树。 知识回顾 (13) 二叉树的遍历 线索二叉树 知识回顾 (13) 主要内容 树与二叉树的转换 森林与二叉树的转换 树与森林的遍历 树与二叉树转换 树与二叉树转换 将树转换成二叉树 加线:在兄弟之间加一连线 抹线:对每个结点,除了其左孩子外,去除其与其余孩子之间的关系 旋转:以树的根结点为轴心,将整树顺时针转45° 将二叉树转换成树 加线:若p结点是双亲结点的左孩子,则将p的右孩子,右孩子的右孩子,……沿分支找到的所有右孩子,都与p的双亲用线连起来 抹线:抹掉原二叉树中双亲与右孩子之间的连线 调整:将结点按层次排列,形成树结构 森林转换成二叉树 将各棵树分别转换成二叉树 将每棵树的根结点用线相连 以第一棵树根结点为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树型结构 知识回顾(14) 树与二叉树的转换 森林与二叉树的转换 树与森林的遍历 知识回顾 (13) 二叉树的遍历 线索二叉树 知识回顾 (13) 最优树的定义 ? 霍夫曼树的构造过程 三、霍夫曼编码 霍夫曼树和霍夫曼编码的存储表示 由于霍夫曼树中没有度为1的结点,(性质3:n0=n2+1)则一颗有n个叶子结点的霍夫曼树共有2n-1个结点,可以存储在2n-1的一维数组中。 编码:从叶子到根 译码:从根到叶子 对每个结点:既需要知道双亲,又需要知道孩子。 Huffman编码举例 w={ 7, 19, 2, 6, 32, 3, 21, 10 }在机内存储形式为: 霍夫曼树的应用 网络安全组播密钥的分配 /phtml 数据压缩/zk/sjjg/200801051038191677.htm 小结:哈夫曼树及其应用 练习 假设用于通讯的电文仅由8个字母A、B、C、D、E、F、G、H组成,字母在电文中出现的频率分别为:0.09,0.16

文档评论(0)

1亿VIP精品文档

相关文档