数据结构 C语言版 第2版 李云清 杨庆红 揭安全 第7章_二叉树新.pptVIP

  • 24
  • 0
  • 约1.9万字
  • 约 83页
  • 2015-12-24 发布于广东
  • 举报

数据结构 C语言版 第2版 李云清 杨庆红 揭安全 第7章_二叉树新.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)

1亿VIP精品文档

相关文档