已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年安阳辅警协警招聘考试真题完整答案详解
- 2024年克州辅警协警招聘考试备考题库及答案详解(易错题)
- 2024年六盘水辅警协警招聘考试备考题库附答案详解(研优卷)
- 2023年辽源辅警招聘考试题库及答案详解(必刷)
- 2024年凉山州辅警招聘考试题库附答案详解ab卷
- 2024年唐山辅警招聘考试题库及答案详解(真题汇编)
- 2023年荆门辅警协警招聘考试真题附答案详解(能力提升)
- 2025年初中一年级语文现代文阅读测试
- 2025年乌鲁木齐市招聘警务辅助人员(600人)考试笔试模拟试题及答案解析
- 杭州银行招聘面试题及答案
- 口腔医学简答题及答案卫生高级职称考试(副高)
- 爆破保管员复训考试题及答案
- 数字经济概论(第二版)-课件全套 戚聿东 第1-13章 数据要素-数据垄断与算法滥用
- 麻醉疑难病例讨论
- 2025至2030年中国泌尿科输尿管支架行业市场动态分析及发展战略研判报告
- 低空空域管理课件
- 食用菌公司管理制度
- 电影公司的背景意义及必要性
- 人教版二年级数学上册全册概念知识点
- 感控管理分级管理制度
- DB13T 1341-2010 景观河道养护技术规程
评论
0/150
提交评论