- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * 其它序线索链表的遍历算法也类似,关键在于找后继结点, 在后序线索树上寻找结点后继: 结点是二叉树的根,则后继为空; 结点是其双亲的右孩子,或双亲的左孩子但双亲没有右子树,则后继为双亲; 结点是双亲的左孩子,且双亲有右子树,则后继为双亲右子树上按后序遍历出的第一个结点。 由此可以看出,在后序线索二叉树中查找结点的前驱和后继要知道其双亲的信息,要使用栈,所以说后序线索二叉树是不完善的。应使用三叉链表。 可以用前面的后序线索树来解释这个问题。 Page * * 实例5:交换二叉树中所有结点的左、右子树* void BinaryTreeT::ChangePos(BinaryTreeNodeT*root){BinaryTreeNodeT* temp; if (root!=null){ //非空 //交换当前结点左右孩子的位置 temp=root-Lchild; root-Lchild=root-Rchild; root-Rchild =temp; //递归交换 ChangePos(root-Lchild); ChangePos(root-Rchild); } } Page * * 实例6:输出后序序列的逆序* void preorder(BinaryTreeNode * T){//输出后序序列的逆序 if (T!=NULL){ printf(“%f”, T-data); preorder(T-rchild); preorder(T-lchild); } } 本 节 重 点 复习要点 例题精解 课后习题 教材133页:22题 关于线索二叉树:给出将二叉树以中序遍历使其变成穿线树的线索化算法。 线索二叉树 遍历二叉树的实质 二叉树遍历的过程,为沿着某一条搜索路径对二叉树中的结点进行一次且仅仅一次访问。 也就是按一定规则将一个处于层次结构中的结点排列成一个线性序列之后进行依次访问,这个线性序列或是先序序列、或是中序序列或是后序序列。 在这些线性序列中每个结点(除第一个和最后一个外)有且仅有一个直接前驱和直接后继。 显然,这种信息是在遍历的动态过程中产生的,如果将这些信息在第一次遍历时就保存起来,则在以后再次需要对二叉树进行遍历时就可以将二叉树视作线性结构进行访问操作了。 如何保存在遍历过程中得到的前驱和后继信息? 线索二叉树 e.g: n = 8 的二叉树 B C D E L A X W B C D E L A X W 扩充二叉树 怎样利用这 n + 1 个空指针场? 中序穿线树 前序穿线树 后序穿线树 二叉树中的空指针场多达 n + 1 个。 灵感: 思想: 一个含 n 个结点的二叉链表中有 n+1 个链域的值为“NULL”。 问题: 利用这些空的指针域存放指向前驱和后继的信息。 引起混淆。 lchild data rchild 是左孩子还是前驱指针? 是右孩子还是后继指针? 解决办法: 在结点中增加两个标志域。 lchild Ltag data Rtag rchild 0 lchild域指示结点的左孩子 Ltag= 1 lchild域指示结点的前趋 0 rchild域指示结点的右孩子 Rtag= 1 rchild域指示结点的后继 线索链表:以这种结点结构构成的二叉链表。 线索:指向结点前趋和后继的指针。 线索二叉树:加上线索二叉树。 线索化:对二叉树以某种次序遍历使其变为线索二叉树的过程。 若某程序中所用二叉树需经常遍历或查找结点在遍历所得线性序列中的前驱或后继,应采用线索链表作存储结构。 A 0 0 B 0 1 C 0 1 D 0 0 F 1 1 G 1 1 E 0 1 H 1 1 root 中序遍历 A B D F G C E H 例,中序线索链表 指向左儿子 指向右儿子 指向前驱 指向后继 NULL template class T class ThreadBinaryTreeNode { private: int lTag,rTag;//左右标志位 //线索或左右子树 ThreadBinaryTreeNodeT *left,*right; T element; public: …. }; 穿线二叉树结点类 中序穿线二叉树类 template class T class ThreadBinaryTree{ private: ThreadBinaryTreeNodeT* root;//根结点指针 public: ThreadBin
您可能关注的文档
最近下载
- 职业技能大赛-电池制造工职业技能竞赛理论知识题库(附参考答案).docx
- 走近苏东坡ppt.ppt VIP
- 第1课时 水果店 课件 2025北师版数学三年级上册.ppt
- 2024年客户服务管理员(三级高级工)技能鉴定考试题库-上(单选、多选题汇总).docx VIP
- 失落的一角(精美版绘本).ppt VIP
- 1.1中华人民共和国成立前各种政治力量 课件(共25张ppt)(含音频+视频).pptx VIP
- 可能性(说课课件)四年级上册数学苏教版.ppt
- 计量器具、仪器日常使用点检表.xls VIP
- 食谱编制—食谱编制案例分析(食品营养与配餐课件).pptx VIP
- 2025上半年国内影视剧市场分析.pptx VIP
文档评论(0)