数据结构与算法5.ppt

  1. 1、本文档共61页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构与算法5要点

5.4 二叉树的遍历及常用操作 1.先序遍历 先序遍历,也称为先根遍历,其访问方式递归定义如下: 对于一棵二叉树,先访问其根结点,再访问根结点的左、右子树; 对于左、右子树中的结点仍然是按照先序遍历方式访问,即先访问根结点,再访问根结点的左、右子树。 提示:在先序遍历中,只规定了根结点和其子树的访问顺序,但没有规定左、右子树的访问顺序。本书中规定,在先序、中序和后序遍历时均是先访问左子树后访问右子树。 例如,对于图5-12所示的二叉树,其先序遍历的结果为:A、B、D、G、C、E、F、H、I。 5.4.1 二叉树的遍历及其实现 5.4 二叉树的遍历及常用操作 5.4.1 二叉树的遍历及其实现 操作 栈中元素(最左边为栈底元素,最右边为栈顶元素) 根结点A入栈 A 栈顶元素A出栈并访问,将A的右孩子C和左孩子B依次入栈 C、B 栈顶元素B出栈并访问,将B的左孩子D入栈 C、D 栈顶元素D出栈并访问,将D的右孩子G入栈 C、G 栈顶元素G出栈并访问 C 栈顶元素C出栈并访问,将C的右孩子F和左孩子E依次入栈 F、E 栈顶元素E出栈并访问 F 栈顶元素F出栈并访问,将F的右孩子I和左孩子H依次入栈 I、H 栈顶元素H出栈并访问 I 栈顶元素I出栈并访问 栈为空,二叉树先序遍历结束 表5-1 图5-12所示二叉树的非递归先序遍历过程 5.4 二叉树的遍历及常用操作 2.中序遍历 中序遍历,也称为中根遍历,其访问方式递归定义如下: 对于一棵二叉树,先访问根结点左子树,再访问根结点,最后右子树; 对于左、右子树中的结点仍然是按照中序遍历方式访问。 例如,对于图5-12所示的二叉树,其中序遍历的结果为:D、G、B、A、E、C、H、F、I。 5.4.1 二叉树的遍历及其实现 5.4 二叉树的遍历及常用操作 3.后序遍历 后序遍历,也称为后根遍历,其访问方式递归定义如下: 对于一棵二叉树,先访问根结点的左子树,后访问右子树,最后访问根结点; 对于左、右子树中的结点仍然是按照后序遍历方式访问。 例如,对于图5-12所示的二叉树,其后序遍历的结果为:G、D、B、E、H、I、F、C、A。 5.4.1 二叉树的遍历及其实现 1.获取指定结点的双亲结点 在二叉树的二叉链表表示中,结点中没有指向其双亲结点的指针,要获取双亲结点则需要从根结点开始遍历二叉树直至找到指定结点的双亲结点。因此,可以参照上一小节中给出的二叉树遍历算法,编写获取双亲结点的程序。 2.删除以指定结点为根的子树 删除以指定结点为根的子树,一方面要将子树从二叉树中删除,另一方面要将子树中的结点释放。将子树从二叉树中删除是通过将指定结点的双亲结点的指针值置空来实现(若删除的是整棵二叉树,则应将根结点指针值置空)。将子树中的结点释放,就是采用类似于遍历子树中所有结点的方式将各结点占据的内存释放。 5.4 二叉树的遍历及常用操作 5.4.2 二叉树常用操作的实现 3.根据关键字查找结点 根据关键字查找结点,实质上就是按照某种规则依次访问二叉树中的每一结点,直至找到与关键字匹配的结点。因此,同遍历算法一样,根据关键字查找结点也可以采用递归方式和非递归方式。 5.4 二叉树的遍历及常用操作 5.4.2 二叉树常用操作的实现 5.5 哈夫曼树和哈夫曼码 哈夫曼树,又称最优二叉树,是指在一类有着相同叶子结点的树中具有最短带权路径长度的二叉树。哈夫曼树在实际中有着广泛的应用。 5.5.1 基本术语 5.5.3 哈夫曼码及其编解码方法 5.5 哈夫曼树和哈夫曼码 5.5.2 哈夫曼树及其构造方法 5.5 哈夫曼树和哈夫曼码 1.结点的权和带权路径长度 在实际应用中,往往给树中的结点赋予一个具有某种意义的实数,该实数就称为是结点的权。结点的带权路径长度是指从树根到该结点的路径长度与结点的权的乘积。 5.5.1 基本术语 2.树的带权路径长度 树的带权路径长度是指树中所有叶子结点的带权路径长度之和,记作(其中,n为叶子结点的数目,Wi为第i个叶子结点的权,Li为根结点到第i个叶子结点的路径长度,可知WiLi为第i个叶子结点的带权路径长度) 5.5 哈夫曼树和哈夫曼码 例如,图5-14中的2棵二叉树,其带权路径长度分别为: WPL(a) = 2*(9+7+5)+3*(2+3) = 57 WPL(b) = 1*3+3*(2+7+5+9) = 72 5.5.1 基本术语 在由n个叶子结点构成的一类二叉树中,具有最短带权路径长度的二叉树称为哈夫曼树。其构造方法如下: 已知n个权值为Wi(i = 1, 2, …, n)的结点,将每

您可能关注的文档

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档