




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6 4线索二叉树 1 线索二叉树 6 4 1线索二叉树的定义6 4 2线索二叉树的遍历算法 2 目的 利用二叉树的空指针保存遍历序列的前驱和后继 n个结点的二叉树 有2n个指针 只用了n 1个 有n 1个是空指针 用空的左指针指向某一遍历序列的前驱 用空的右指针指向某一遍历序列的后继 这两种指针称为线索 Thread 为了区分线索与真实指针 给结点增加两个域Ltag和Rtag 6 4 1线索二叉树的概念 3 Ltag 0 lchild指向结点的左子女 Ltag 1 lchild指向某一遍历序列前驱 Rtag 0 rchild指向结点的右子女 Rtag 1 rchild指向某一遍历序列后继 6 4 1线索二叉树的概念 4 二叉树的二叉线索存储表示typedefenum Link Thread PointerTag Link 0 指针 Thread 1 线索typedefstructBiThrNode TElemTypedata StructBiThrNode lchild rchild 左右孩子指针PointerTagLTag RTag 左右标志 BiThrNode BiThrTree 6 4 1线索二叉树的概念 5 加了线索的二叉树是线索二叉树 给二叉树加线索的过程是线索化 穿线 按前序遍历序列穿线的二叉树是前序线索二叉树 按中序遍历序列穿线的二叉树是中序线索二叉树 按后序遍历序列穿线的二叉树是后序线索二叉树 中序线索二叉树简称线索二叉树 6 加了线索的二叉树是线索二叉树 二叉树加线索的过程是线索化 穿线 按前序遍历序列穿线的二叉树是前序线索二叉树 按中序遍历序列穿线的二叉树是中序线索二叉树 按后序遍历序列穿线的二叉树是后序线索二叉树 中序线索二叉树简称线索二叉树 6 4 1线索二叉树的概念 7 线索二叉树 ThreadedBinaryTree A G D B F c E a 二叉树 b 先序线索树 root ABDGCEF 8 线索二叉树 ThreadedBinaryTree A G D B F C E a 二叉树 c 中序线索树 root DGBAECF 9 线索二叉树 ThreadedBinaryTree A G D B F C E a 二叉树 d 后序线索树 root GDBEFCA 10 D B F E A C NULL NULL 中序线索二叉树 线索二叉树 ThreadedBinaryTree 11 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 12 6 4 2线索二叉树的遍历算法 算法6 6 中序遍历二叉树T 并将其中序线索化 Thrt指向头结点StatusInOrderThreading BiThrTree InOrderThreading 13 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 14 非递归中序遍历二叉树的算法 复习 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线索二叉树的遍历算法 15 对以二叉链表存储的二叉树进行中序线索化 非递归的 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 16 中序 线索二叉树的线索给我们提供了足够的信息 对其进行遍历时 既不需要递归 使用了系统栈 也不需要栈 对 中序 线索二叉树进行非递归遍历且不需要设栈时需要主要解决的两个问题 找到某一次序下的第一个结点p 2 找出给定结点p在某一次序中的后继结点 17 关键问题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 中序遍历 中序 线索二叉树时如何解决这两个问题 18 前序遍历线索二叉树的算法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 19 关键问题1根就是第一个结点 关键问题2 有如下3种情况 P有左子女 则p左子
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 凉山自治州中储粮2025秋招信息技术岗高频笔试题库含答案
- 中国移动达州市2025秋招笔试行测题库及答案供应链采购类
- 安徽地区中石油2025秋招笔试模拟题含答案油品分析质检岗
- 牡丹江市中石油2025秋招面试半结构化模拟题及答案机械与动力工程岗
- 中国移动包头市2025秋招笔试性格测评专练及答案
- 商丘市中石油2025秋招笔试模拟题含答案炼油设备技术岗
- 珠海市中石油2025秋招笔试行测50题速记
- 三明市中石油2025秋招笔试提升练习题含答案
- 国家能源吉林市2025秋招机械工程类面试追问及参考回答
- 张掖市中石油2025秋招笔试模拟题含答案安全环保与HSE岗
- 医院污水处理站服务外包项目投标方案(技术方案)
- 2024年全球及中国运动功能性针织面料行业头部企业市场占有率及排名调研报告
- 2025版预防接种规范
- 拆除清运合同协议
- 雨污合流管网改造工程施工组织设计
- 俱乐部账务管理制度
- 项目持续改进管理制度
- 成人重症患者颅内压增高防控护理专家共识(2024版)解读课件
- 钢网架结构同气膜结构方案比较
- 问诊流程及规范
- 山体滑坡事故应急处理模版课件
评论
0/150
提交评论