ppt课件-第6章树和二叉树.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ppt课件-第6章树和二叉树

如何在线索树中找结点的直接后继?以图6-11(d) ,(e)所示的中序线索树为例: ◆ 树中所有叶子结点的右链都是线索。右链直接指示了结点的直接后继,如结点G的直接后继是结点E。 ◆ 树中所有非叶子结点的右链都是指针。根据中序遍历的规律,非叶子结点的直接后继是遍历其右子树时访问的第一个结点,即右子树中最左下的(叶子)结点。如结点C的直接后继:沿右指针找到右子树的根结点F,然后沿左链往下直到Ltag=1的结点即为C的直接后继结点H。 如何在线索树中找结点的直接前驱?若结点的Ltag=1,则左链是线索,指示其直接前驱;否则,遍历左子树时访问的最后一个结点(即沿左子树中最右往下的结点) 为其直接前驱结点。 对于后序遍历的线索树中找结点的直接后继比较复杂,可分以下三种情况: ◆ 若结点是二叉树的根结点:其直接后继为空; ◆ 若结点是其父结点的左孩子或右孩子且其父结点没有右子树:直接后继为其父结点; ◆ 若结点是其父结点的左孩子且其父结点有右子树:直接后继是对其父结点的右子树按后序遍历的第一个结点。 6.4.1 线索化二叉树 二叉树的线索化指的是依照某种遍历次序使二叉树成为线索二叉树的过程。 线索化的过程就是在遍历过程中修改空指针使其指向直接前驱或直接后继的过程。 仿照线性表的存储结构,在二叉树的线索链表上也添加一个头结点head,头结点的指针域的安排是: ◆ Lchild域:指向二叉树的根结点; ◆ Rchild域:指向中序遍历时的最后一个结点; ◆ 二叉树中序序列中的第一个结点Lchild指针域和最后一个结点Rchild指针域均指向头结点head。 如同为二叉树建立了一个双向线索链表,对一棵线索二叉树既可从头结点也可从最后一个结点开始按寻找直接后继进行遍历。显然,这种遍历不需要堆栈,如图6-12所示。结点类型定义 #define MAX_NODE 50 typedef enmu{Link , Thread} PointerTag ; /* Link=0表示指针, Thread=1表示线索 */ typedef struct BiThrNode { ElemType data; struct BiTreeNode *Lchild , *Rchild ; PointerTag Ltag , Rtag ; }BiThrNode; (a) 二叉树 (b) 中序线索树的逻辑形式 A F H I E G B D C NIL NIL A F H I E G B D C 图6-12 中序线索二叉树及其存储结构 (c) 中序线索二叉链表 0 A 0 0 B 1 0 C 0 1 D 1 0 E 1 0 F 0 1 G 1 1 H 1 1 F 1 Thrt 0 1 head 1 先序线索化二叉树 void preorder_Threading(BiThrNode *T) { BiThrNode *stack[MAX_NODE]; BiThrNode *last=NULL, *p ; int top=0 ; if (T!=NULL) { stack[++top]=T; while (top0) { p=stack[top--] ; if (p-Lchild!=NULL) p-Ltag=0 ; else { p-Ltag=1 ; p-Lchild!=last ; } if (last!=NULL) if (last-Rchild!=NULL) last-Rtag=0 ; else { last-Rtag=1 ; last-Rchild!=p ; } last=p ; if (p-Rchild!=NULL) stack[++top]=p-Rchild ; if (p-Lchild!=NULL) stack[++top]=p-Lchild ; } Last-Rtag=1; /* 最后一个结点是叶子结点 */ } } 2 中序线索化二叉树 void inorder_Threading(BiThrNode *T) { BiThrNode *stack[MAX_NODE]; BiThrNode *last=NULL, *p=T

文档评论(0)

MvS023247 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档