




免费预览已结束,剩余16页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6 4线索二叉树 2 线索二叉树 6 4 1线索二叉树的定义6 4 2线索二叉树的遍历算法 目的 利用二叉树的空指针保存遍历序列的前驱和后继 n个结点的二叉树 有2n个指针 只用了n 1个 有n 1个是空指针 用空的左指针指向某一遍历序列的前驱 用空的右指针指向某一遍历序列的后继 这两种指针称为线索 Thread 为了区分线索与真实指针 给结点增加两个域Ltag和Rtag 6 4 1线索二叉树的概念 Ltag 0 lchild指向结点的左子女 Ltag 1 lchild指向某一遍历序列前驱 Rtag 0 rchild指向结点的右子女 Rtag 1 rchild指向某一遍历序列后继 6 4 1线索二叉树的概念 二叉树的二叉线索存储表示typedefenum Link Thread PointerTag Link 0 指针 Thread 1 线索typedefstructBiThrNode TElemTypedata StructBiThrNode lchild rchild 左右孩子指针PointerTagLTag RTag 左右标志 BiThrNode BiThrTree 6 4 1线索二叉树的概念 4 1 2020 加了线索的二叉树是线索二叉树 给二叉树加线索的过程是线索化 穿线 按前序遍历序列穿线的二叉树是前序线索二叉树 按中序遍历序列穿线的二叉树是中序线索二叉树 按后序遍历序列穿线的二叉树是后序线索二叉树 中序线索二叉树简称线索二叉树 加了线索的二叉树是线索二叉树 二叉树加线索的过程是线索化 穿线 按前序遍历序列穿线的二叉树是前序线索二叉树 按中序遍历序列穿线的二叉树是中序线索二叉树 按后序遍历序列穿线的二叉树是后序线索二叉树 中序线索二叉树简称线索二叉树 6 4 1线索二叉树的概念 线索二叉树 ThreadedBinaryTree A G D B F c E a 二叉树 b 先序线索树 root ABDGCEF 线索二叉树 ThreadedBinaryTree A G D B F C E a 二叉树 c 中序线索树 root DGBAECF 线索二叉树 ThreadedBinaryTree A G D B F C E a 二叉树 d 后序线索树 root GDBEFCA D B F E A C NULL NULL 中序线索二叉树 线索二叉树 ThreadedBinaryTree 6 4 2线索二叉树的遍历算法 算法6 5 中序遍历二叉线索树T的非递归算法 对每个数据元素调用函数Visit T指向头结点 头结点的左链lchild指向根结点 可参见线索化算法 StatusInOrderTraverse Thr BiThrTreeT Status Visit TElemTypee p T lchild p指向根结点while p T 空树或遍历结束时 p Twhile p LTag Link p p lchild if Visit p data returnERROR 访问其左子树为空的结点while p RTag Thread InOrderTraverse Thr 6 4 2线索二叉树的遍历算法 算法6 6 中序遍历二叉树T 并将其中序线索化 Thrt指向头结点StatusInOrderThreading BiThrTree InOrderThreading 6 4 2线索二叉树的遍历算法 voidINThreading BiThrTreep if p InThreading p lchild 左子树线索化if p lchild p LTag Thread p lchild pre 前驱线索if pre rchild pre RTag Thread pre rchild p 后继线索pre p 保持pre指向p的前驱InThreading p rchild 右子树线索化 InThreading 非递归中序遍历二叉树的算法 复习 VoidlnorderTraverse BiTreeBT 采用二叉链表存储结构 中序遍历二叉树T的非递归算法 InitStack S p BT while p StackEmpty S if p push S p p p lchild 根指针进栈 遍历左子树else 根指针退栈 访问根结点 遍历右子树pop S p visit p p p rchild else InOrderTraverse 6 4 2线索二叉树的遍历算法 对以二叉链表存储的二叉树进行中序线索化 非递归的 voidInOrderThreading BiThrTreeBT InitStack S 建立栈p BT pre NULL p指向根 pre是p的前驱结点while p StackEmpty S if p push S p p入栈p p lchild p指向左子女else pop S p 弹出栈顶元素到p中if p lchild p lchild pre p ltag true if pre p指向右子女 endofwhile endofInOrderThreading BT visit p 中序 线索二叉树的线索给我们提供了足够的信息 对其进行遍历时 既不需要递归 使用了系统栈 也不需要栈 对 中序 线索二叉树进行非递归遍历且不需要设栈时需要主要解决的两个问题 找到某一次序下的第一个结点p 2 找出给定结点p在某一次序中的后继结点 关键问题1沿着根的左链走 直到无左子女的结点p 即中序序列中的第一个结点 p BT while p ltag p p lchild 关键问题2 有如下两种情况 P无右子女 则p rchild是p的后继 P有右子女 则p的右子树中最左的结点就是p的后继 方法同关键问题1 if p rtag p p rchild P无右子女else p p rchild P有右子女while p ltag p p lchild 中序遍历 中序 线索二叉树时如何解决这两个问题 前序遍历线索二叉树的算法voidPreOrderTraverse BiThrTreeBT p BT while p visit p if p ltag p p lchild P有左子女elseif p rtag p p rchild P有右子女else r p rchild p是叶子while r PreOrderTraverse 关键问题1根就是第一个结点 关键问题2 有如下3种情况 P有左子女
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 飞机模线样板移型工多工种协调能力考核试卷及答案
- 三方协议书有偿
- 公司汽车维修工职业健康技术规程
- 药芯焊丝成型工数字化转型工具应用考核试卷及答案
- 锚链打包浸漆工协作配合积极性考核试卷及答案
- 铸造造型(芯)工6S现场管理考核试卷及答案
- 公司感光材料涂布工岗位现场作业技术规程
- 公司茶园管理员工艺技术规程
- 福建省泉州第十六中学2026届七年级数学第一学期期末检测试题含解析
- 2025合同模板个人房屋租赁合同示范文本范本
- 2025年度社区工作者真题题库及答案
- 2025年9月 基孔肯雅热疫情防控工作的经验总结报告
- 鞘内药物输注技术
- 基层应急管理培训课件
- 乡镇卫生院管理制度
- 抗肿瘤药项目建议书(立项报告)
- 2024-2025学年山东省济南市高一上册第一次月考数学学情检测试题
- 二零二五年度版学校合作协议范本:高校与中小学合作培养协议
- 23G409先张法预应力混凝土管桩
- 《水的组成说课课案》课件
- 快件处理员(中级)职业技能鉴定考试题库(含答案)
评论
0/150
提交评论