网站大量收购闲置独家精品文档,联系QQ:2885784924

数据结构第14讲—线索树与树与森林—c.ppt

数据结构第14讲—线索树与树与森林—c.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构第14讲—线索树与树与森林—c

6.3.2 线索二叉树 1.何谓线索二叉树? 遍历结果是求得结点的一个线性序列。指向该线性序列“前驱”和“后继”的指针,称“线索”;包含“线索”的存储结构,称为“线索链表”;与其相应的二叉树,称为“线索二叉树”;对二叉树以某种次序遍历,使其变为线索二叉树的过程,称为“线索化”。 2.线索链表中结点的结构 在二叉链表的结点结构中增加两个标志域,并规定: 二叉树二叉线索存储表示 typedef enum { Link, Thread } PointerThr; // Link==0:指针,Thread==1:线索 typedef struct BiThrNode{ TElemType data; Struct BiThrNode *lchild, *rchild; // 左右孩子指针 PointerThr LTag, RTag; // 左右标志 } BiThrNode, *BiThrTree; 如何在线索树中找结点的后继? 如何在线索树中找结点的前驱? 4.如何建立线索化链表? 由于线索化的实质是将二叉链表中的空指针改为指向前驱或后继的线索,而前驱或后继的信息只有在遍历时才能得到,因此线索化的过程即为在遍历的过程中修改空指针的过程。 对二叉链表p进行中序线索化的递归算法(带头结点) Status InOrderThreading(BiThrTree Thrt,BiThrTree T) 步骤: 对二叉链表p进行中序线索化的递归算法(不带头结点) void InThreading(BiThrTree p){  if (p){   InThreading(p-lchild); //左子树线索化   if (!p-lchild){ p-lchild=pre; p-ltag=Thread;} //前驱线索   if (!pre-rchild){pre-rchild=p;pre-rtag=Thread;} //后继线索 pre = p; //保持pre指向p的前驱 InThreading(p-rchild);   //右子树线索化 } }InThreading  Status InOrderThreading(BiThrTree Thrt,BiThrTree T){ //中序遍历二叉树T,并将其中序线索化,Thrt指向头结点。 Thrt=(BiThrTree)malloc(sizeof(BiThrNode)); if (!Thrt) exit(OVERFLOW); Thrt-ltag=Link; Thrt-rtag=Thread; //建立头结点 Thrt-rchild=Thrt; if (!T) Thrt-lchild=Thrt; //空树,左指针回指自身 else{ //二叉树不为空树,进行线索化 Thrt-lchild=T; //头结点的lchild指向二叉链表根   pre=Thrt; //pre指向前驱结点 InThreading(T); //中序线索化二叉链表T pre-rchild=Thrt; pre-rtag=Thread; //最后一个结点线索化 Thrt-rchild=pre; } return OK; } Status InOrderThreading(BiThrTree Thrt,BiThrTree T){ Thrt=(BiThrTree)malloc(sizeof(BiThrNode));  if (!Thrt) exit(OVERFLOW); Thrt-ltag=Link; Thrt-rtag=Thread; Thrt-rchild=Thrt; if (!T) Thrt-lchild=Thrt; //空树,Thrt回指自身 else{ Thrt-lchild=T;//头结点的lchild指向二叉链表根 pre=Thrt; //pre指向前驱结点 InThreading(T); //中序线索化二叉链表T pre-rchild=Thrt; pre-rtag=Thread; //最后一个结点线索化 Thrt-rchild=pre; } return OK; } 6.4.1 树的存储结构 三种常用的链表结构: 双亲表示法 孩子表示法 孩子兄弟表示法 6.4.2 森林和二叉树的转换 1. 树和二叉树的对应关系

文档评论(0)

shaoye348 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档