- 1、本文档共82页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章_二叉树new.ppt
p 该点即是 3、 中序遍历中序穿线二叉树inthrtree(p)基本思想:首先找到中序遍历下的第一个结点(从根结点出发,沿着左指针不断往左下走,直到左指针为空,到达“最左下”的结点即可),访问它后,然后不断寻找结点在中序下的后继结点并输出,直至所有的结点均被输出为止。 binthrtree insuccnode(binthrtree p) { /*寻找结点p在中序遍历下的后继结点*/ binthrtree q; if (p-rtag==1) return p-rchild; else { q=p-rchild; while (q-ltag==0) q=q-lchild; return q; } } 3、 中序遍历中序穿线二叉树inthrtree(p)基本思想:首先找到中序遍历下的第一个结点(从根结点出发,沿着左指针不断往左下走,直到左指针为空,到达“最左下”的结点即可),访问它后,然后不断寻找结点在中序下的后继结点并输出,直至所有的结点均被输出为止。 binthrtree insuccnode(binthrtree p) { /*寻找结点p在中序遍历下的后继结点*/ binthrtree q; if (p-rtag==1) return p-rchild; else { q=p-rchild; while (q-ltag==0) q=q-lchild; return q; } } 该点即是 p void inthrtree(binthrtree p) { /*中序遍历中序穿线二叉树p*/ if (p) { /*求二叉树p中序遍历下的第一个结点*/ while (p-ltag==0) p=p-lchild; /*依次遍历各结点*/ do { printf(“%c ”,p-data); p=insuccnode(p); } while (p); } } 找P节点的中序穿线树中中序前驱算法如下: 若p的左指针为线索则返回左指针指示的节点; 若p的左指针为实指针,则其中序前驱为其左子树的中序下的尾点(左子树中右进过程中遇到的第一个线索)。 A B C D E F F的前驱为D,D的前驱为B A的前驱E 后序穿线树中的两个操作 (1)找后序穿线树中的后序前驱 若p的左子树为空,则p-lchild是前驱线索,指示其后序前驱结点。 若p的左子树非空,则p-lchild不是前驱线索,此时,若p的右子树非空,则p的后序前驱必为其右子树的根节点;若p的右子树为空,则其后序前驱为其左孩子。 后序序列:CDBHIGFEA A E F G H I B C D ^ H后序前驱为B, F的后序前驱是G A的后序前驱是E,E的后序前驱是F (2)找后序穿线树中的后序后继 若p为根,p无后序后继; 若p是其双亲的右孩子,则p的后序后继为其双亲节点; 若p是双亲的左孩子,且p无右兄弟时,p的后序节点是其双亲节点; 若p是其双亲的左孩子,但p有右兄弟,则p的后序是其双亲的右子树的后序首点(即该子树中的最左下的结点) 后序序列:CDBHIGFEA E的后序后继为A F的后序后继为E B的后序后继为H A E F G H I B C D ^ 7.7.1 树、森林到二叉树的转换将树或森林转换成其对应二叉树的方法为:(1) 在所有兄弟结点之间添加一条连线,如果 是森林,则在其所有树的树根之间同样也 添加一条连线;(2) 对于树、森林中的每个结点,除保留其到 第一个子女的连线外,撤消其到其它子女 的连线;(3) 将以上得到的树按照顺时针方向旋转45度。 7.7 树、森林和二叉树的转换 a b c d e f g (a) 树到二叉树的转换 a b c d e f g (b)
文档评论(0)