欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    中序遍历和线索化二叉树.ppt

    • 资源ID:2708818       资源大小:153.01KB        全文页数:24页
    • 资源格式: PPT        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    中序遍历和线索化二叉树.ppt

    6.3遍历二叉树和线索二叉树,6.3.1遍历二叉树 如果按某条搜索路径巡访树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。,先序遍历二叉树的操作定义为:,若二叉树为空,则空操作;否则 (1)访问根结点; (2)先序遍历左子树; (3)先序遍历右子树。 A B C D F E G,先序遍历二叉树的递归算法,Status PreOrderTraverse(BiTree T, Status(* Visit)(TElemType e) if (T) if (Visit(T-data) if (PreOrderTraverse(T-lchild,Visit) if (PreOrderTraverse(T-rchild,Visit) return OK; return ERROR; else return OK; /PreOrderTraverse,中序遍历二叉树的操作定义为:,若二叉树为空,则空操作;否则 (1)中序遍历左子树; (2)访问根结点; (3)中序遍历右子树。 C B D F A G E,中序遍历二叉树示例,中序遍历二叉树得: a+b*(c-d)-e/f,中序遍历二叉树的递归算法,Status InOrderTraverse(BiTree T, Status(* Visit)(TElemType e) if (T) if (InOrderTraverse(T-lchild,Visit) if (Visit(T-data) if (InOrderTraverse(T-rchild,Visit) return OK; return ERROR; else return OK; /InOrderTraverse,后序遍历二叉树的操作定义为:,若二叉树为空,则空操作;否则 (1)后序遍历左子树; (2)后序遍历右子树; (3)访问根结点。 C F D B G E A,后序遍历二叉树的递归算法,Status PostOrderTraverse(BiTree T, Status(* Visit)(TElemType e) if (T) if (PostOrderTraverse(T-lchild,Visit) if (PostOrderTraverse(T-rchild,Visit) if (Visit(T-data) return OK; return ERROR; else return OK; /PostOrderTraverse,中序遍历二叉树的非递归算法,Status InOrderTraverse(BiTree T, Status(* Visit) (TElemType e) InitStack(S); Push(S,T); while(!StackEmpty(S) while(GetTop(S,p) /InOrderTraverse,中序遍历二叉树的非递归算法 示意图,C B D F A G E,例: 已知结点的先序序列和中序序列,求整棵二叉树。,先序序列:A B C D E F G 中序序列:C B E D A F G,构造二叉链表表示的二叉树 的递归算法,Status CreateBiTree(BiTree /CreateBiTree,构造二叉链表,按下列次序输入字符: ABCDEGF (其中表示空格字符) 可建立如右图的二叉链表.,6.3.2 线索二叉树,遍历是非线性结构的线性化操作 保留遍历过程的顺序信息 - 线索二叉树的表示: 若结点有左子树,则其LCHILD域指示其左孩子,否则令LCHILD域指示其前驱; 若结点有右子树,则其RCHILD域指示其右孩子,否则令RCHILD域指示其后继。,线索二叉树结点的结构:,0 lchild域指示其左孩子 ltag = 1 lchild域指示其前驱 0 rchild域指示其右孩子 rtag = 1 rchild域指示其后继 线索二叉树 线索化 线索链表 线索,中序线索二叉树,NIL,NIL,中序线索二叉树中 查找结点的后继和前驱:,如何在中序线索二叉树中找结点的后继: rtag = 1时,rchild所指的结点即为后继; rtag = 0时,其后继为遍历其右子树时的第一个结点(最左下结点)。 如结点 “*”的后继是“c” 。 如何在中序线索二叉树中找结点的前驱: ltag = 1时,lchild所指的结点即为前驱; ltag = 0时,其前驱为遍历其左子树时的最后一个结点(最右下结点)。 如根结点 “-”的前驱是“d” 。,中序线索二叉树,/ 二叉树的二叉线索存储表示 typedef enum Link,Thread PointerTag; /Link=0:指针,Thread=1:线索 typedef struct BiThrNode TElemType data; struct BiThrNode *lchild,*rchild; /左右孩子指针 PointerTag LTag,RTag; /左右标志 BiThrNode, *BiThrTree;,中序遍历二叉树T,并将其中序线索化: (为了记下遍历过程中访问结点的先后次序,附设一个全程指针pre),Status InOrderThreading(BiThrTree /InOrderThreading,中序遍历进行中序线索化,void InThreading(BiThrTree p) / 一个全程指针pre 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,例如: 将下列二叉链表改为中序线索链表,1 2 3 4 5 6 7 8 9 10 11 12 13 14,上例树的形态,1 2 3 4 5 6 7 8 9 10 11 12 13 14,中序遍历二叉线索树T的非递归算法:,Status InOrderTraverse_Thr(BiThrTree T, Status(*Visit)(TElemType e) / T指向头结点,头结点的左链lchild 指向根结点, /可参见线索化算法。中序遍历二叉线索树T的非递归算法, / 对每个数据元素调用函数Visit. p=T-lchild; /p指向根结点 while(p!=T) /空树或遍历结束时,p=T while(p-LTag=Link)p=p-lchild;/p寻找最左下结点 if (!Visit(p-data) return ERROR; /访问其左子树为空的结点 while(p-RTag=Thread /InOrderTraverse_Thr,实验与习题,理论习题 6.12-6.16,6.23 实验算法题: 6.37,

    注意事项

    本文(中序遍历和线索化二叉树.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开