数据结构第6章 树和二叉树.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
树和森林的遍历 2.森林的遍历 设F={T1, T2,?,Tn}是森林,对F的遍历有二种方法。 1 2 先序遍历:按先序遍历树的方式依次遍历F中的每棵树。 中序遍历:按后序遍历树的方式依次遍历F中的每棵树。 学 习 进 步! 数据结构(Python语言描述) * * * 6.2.5 顺序存储结构 二叉树存储结构的类型定义: 对于完全二叉树上编号为i的结点元素存储在一维数组的下标值为i-1的分量中,如图6-5(c)所示。 对于一般的二叉树,将其每个结点与完全二叉树上的结点相对照,存储在一维数组中,如图6-5(d)所示。 用一组地址连续的存储单元依次“自上而下、自左至右”存储完全二叉树的数据元素。 6.2.5 顺序存储结构 a b c d h i e j k l f g (a) 完全二叉树 (b) 非完全二叉树 a b c d e f g h ? ? ? 1 2 3 4 5 6 7 8 9 10 11 12 a b c d e f g h i j k l (c) 完全二叉树的顺序存储形式 1 2 3 4 5 6 7 8 9 10 11 a b c d e ? h ? ? f g (d) 非完全二叉树的顺序存储形式 图6-5 二叉树及其顺序存储形式 最坏的情况下,一个深度为k且只有k个结点的单支树需要长度为2k-1的一维数组。 6.2.6 链式存储结构 设计不同的结点结构可构成不同的链式存储结构。 (1) 结点的类型及其定义 1 二叉链表结点。有三个域:一个数据域,两个分别指向左右子结点的指针域。 class Node(object): def __init__(self, val): self.val = val self.left = None self.right = None 6.2.6 链式存储结构 2 三叉链表结点。除二叉链表的三个域外,再增加一个指针域,用来指向结点的父结点。 class Node(object): def __init__(self, val): self.val = val self.left = None self.right = None self.parent = None 6.2.6 链式存储结构 (2) 二叉树的链式存储形式 例有一棵一般的二叉树,如图6-6(a)所示。以二叉链表和三叉链表方式存储的结构图分别如图6-6(b) 、 6-6(c)所示。 图6-6 二叉树及其链式存储结构 (a) 二叉树 a f e d c b g (c) 三叉链表 a ? ? b ? c ? d ? e ? f ? ? g ? T (b) 二叉链表 a ? b ? c ? d ? e ? g ? ? f ? T 6.2.7 遍历二叉树及其应用 ÷ × 二叉树是一种非线性结构,每个结点都可能有左、右两棵子树,因此,需要寻找一种规律,使二叉树上的结点能排列在一个线性队列上,从而便于遍历。 遍历二叉树(Traversing Binary Tree):是指按指定的规律对二叉树中的每个结点访问一次且仅访问一次。 所谓访问是指对结点做某种处理。如:输出信息、修改结点的值等。 二叉树的基本组成:根结点、左子树、右子树。若能依次遍历这三部分,就是遍历了二叉树。 6.2.7 遍历二叉树及其应用 LDR——中(根)序遍历。 DLR——先(根)序遍历。 LRD——后(根)序遍历。 若以L、D、R分别表示遍历左子树、遍历根结点和遍历右子树,则有六种遍历方案:DLR、LDR、LRD、DRL、RDL、RLD。若规定先左后右,则只有前三种情况三种情况,分别是: 对于二叉树的遍历,分别讨论递归遍历算法和非递归遍历算法。递归遍历算法具有非常清晰的结构,但初学者往往难以接受或怀疑,不敢使用。实际上,递归算法是由系统通过使用堆栈来实现控制的。而非递归算法中的控制是由设计者定义和使用堆栈来实现的。 6.2.7 遍历二叉树及其应用 1. 先序遍历二叉树 1 递归算法 算法的递归定义是:若二叉树为空,则遍历结束;否则: 先序遍历左子树(递归调用本算法); 访问根结点; 先序遍历右子树(递归调用本算法)。 6.2.7 遍历二叉树及其应用 先序遍历的递归算法 def recursive_pre(self, node):????????? #递归先序遍历 ??? if node

文档评论(0)

132****9295 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档