- 1、本文档共216页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
高艳霞数与据结构第08讲
第6章 树和二叉树 6.1 树 6.1.1 树的有关概念 6.1.2 树的表示 6.1.3 树的基本运算 6.2 二叉树 6.2.1 二叉树的概念 6.2.2 二叉树的性质 6.2.3 二叉树的存储结构 6.2.4 二叉树的遍历 6.2.5 线索二叉树 6.3 树和森林 6.3.1 树的存储结构 6.3.2 树、森林与二叉树的转换 6.3.3 树和森林的遍历 例题:2003年的高程题,完全二叉树的求解。 一个具有767个结点的完全二叉树,其叶子结点个数为:A.383 B.384 C.385 D.386 二叉树遍历的概念 二叉树遍历的方法 二叉树遍历的应用 二叉树遍历的实现算法 二叉树遍历的概念 遍历的含义 访问结构中的所有元素且只访问一次 二叉树遍历的定义 按一定规律对二叉树中每个结点访问且仅访问一次 二叉树遍历的目的 在对二叉树的很多处理中,需要二叉树结点的一个线性序列 实质而言,遍历的目的就是对二叉树进行线性化处理,以得到一个结点的线性序列 对二叉树处理而言,遍历的目的是为二叉树的其他运算奠定基础 二叉树遍历的方法 有哪些方法 二叉树由三个基本部分组成: 根结点 左子树 右子树 遍历二叉树实质就是完成如下三项工作: 访问根结点 D 遍历左子树 L 遍历右子树 R 这三项工作按顺序组合可以得到6 种遍历方案: DLR DRL LDR RDL LRD RLD 对这6 种方案加上“先左后右”的限定,则得到如下3种遍历方案: DLR 称为先(根)序遍历 LDR 称为中(根)序遍历 LRD 称为后(根)序遍历 遍历方法的描述 二叉树遍历的方法 有哪些方法 二叉树由三个基本部分组成: 根结点 左子树 右子树 遍历二叉树实质就是完成如下三项工作: 访问根结点 D 遍历左子树 L 遍历右子树 R 这三项工作按顺序组合可以得到6 种遍历方案: DLR DRL LDR RDL LRD RLD 对这6 种方案加上“先左后右”的限定,则得到如下3种遍历方案: DLR 称为先(根)序遍历 LDR 称为中(根)序遍历 LRD 称为后(根)序遍历 遍历方法的描述 二叉树遍历的方法 有哪些方法 遍历方法的描述 先序遍历二叉树 若二叉树为空,则空操作; 否则 (1) 访问根结点; (2) 先序遍历左子树; (3) 先序遍历右子树。 中序遍历二叉树 若二叉树为空,则空操作; 否则 (1)中序遍历左子树; (2) 访问根结点; (3) 中序遍历右子树。 后序遍历二叉树 若二叉树为空,则空操作; 否则 (1)后序遍历左子树; (2)后序遍历右子树; (3)访问根结点。 二叉树结构的性质 已知二叉树的先序序列和中序序列,可以唯一确定一颗二叉树。 已知二叉树的后序序列和中序序列,可以唯一确定一颗二叉树。 已知二叉树的先序序列和后序序列,不能唯一确定一颗二叉树。(AB和BA) 已知二叉树的层次序列和中序序列,可以唯一确定一颗二叉树。 补充一点: 对一棵二叉树中序遍历时,若我们将二叉树严格地按左子树的所有结点位于根结点的左侧,右子树的所有结点位于根右侧的形式绘制,就可以对每个结点做一条垂线,映射到下面的水平线上,由此得到的顺序就是该二叉树的中序遍历序列。 void preorder1(bintree t) /*非递归实现二叉树的前序遍历*/ { seqstack s; s.top=-1; while ((t) || (s.top!=-1)) /*当前处理的子树不为空或栈不为空则循环*/ { while (t) { coutt-data; s.top++; s.data[s.top]=t; t=t-lchild; } if (s.top-1) { t=pop(s); t=t-rchild; } } } 后序遍历的非递归实现 后序遍历一棵非空树t时,首先应该进入t的左子树访问,此时由于t的右
文档评论(0)