DS06树和二叉树03线索二叉树树和森林.pptVIP

  • 3
  • 0
  • 约7.72千字
  • 约 51页
  • 2019-11-09 发布于广东
  • 举报

DS06树和二叉树03线索二叉树树和森林.ppt

分析: 与双亲表示法相反,孩子表示法便于涉及孩子的操作实现,却不适用于parent(T,x)操作。可根据某种需要,将二者结合起来,即带双亲的孩子链表。 3. 孩子兄弟表示法 或称二叉链表表示法。 即以二叉链表作树的存储结构。链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点。 树的二叉链表(孩子 - 兄弟)存储表示 typedef struct CSNode { TElemType data; struct CSNode *firstchild , *nextsibling; } CSNode, *CSTree; 结点结构 firstchild data nextsibling ^ R ^ E ^ ^ K ^ ^ C ^ F A B ^ G ^ H ^ D ^ D A C R E B F H G K 二叉链表(孩子兄弟)表示法 例: 分析: 这种存储结构便于实现各种树的操作。首先易于实现找结点孩子等的操作。如果为每个结点增设一个(parent)域,则同样能方便地实现parent(T,x)操作。 6.4.2 森林和二叉树的转换 树、森林与二叉树之间可以互相进行转换, 即任何一个森林或一棵树都可以唯一地对应一棵二叉树,而任何一棵二叉树也能唯一地对应到一个森林或一棵树上。 正是由于这样的一一对应关系,可以把树的处理问题转化为二叉树的处理问题,从而把问题简化。 下面介绍树、森林与二叉树的相互转换。 1. 树和二叉树的对应关系 1.兄弟加线. 树转换为二叉树方法 A B C D E F G 2.保留双亲与第一孩子连线,删去与其他孩子的连线. 3.所有横线转动45o G D A B E C F A B C D E G H F I (a) A B C D E G H F I (b) A B C D E G H F I (c) A B C D E G H F I (d) 例: 2. 森林和二叉树的对应关系 从树的二叉链表表示的定义可知,任何一棵和树对应的二叉树,其右子树必空。 那么,若把森林中第二棵树的根结点看成是第一棵树的根结点的兄弟,则同样可导出森林和二叉树的对应关系。 1.森林转换成二叉树 如果F={T1,T2,……,Tm}是森林,则可以按如下规则转换成一棵二叉树B={ROOT,LB,RB} 1)? 若F为空,即m=0,则B为空二叉树。 2)? 若F非空,即?m≠0,则B的根ROOT即为森林中第一棵树的根ROOT(T1),B的左子树LB是从第一棵树T1的子树森林F1={T11,T12,……,T1m1}转换而成的二叉树;其右子树RB是从其余树的森林F′={T2,T3,……,Tm}转换而成的二叉树。 转换方法: ⑴ 将森林中的每棵树转换成二叉树; ⑵ 从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树根结点的右孩子,当所有二叉树连起来后,此时所得到的二叉树就是由森林转换得到的二叉树。 1 2 B C D E G H F I (a) B C D E G H F I (b) B C D E G H F I (c) B C D E G H F I (d) 二叉树转换成森林、树 ?? 如果B={ROOT,LB,RB}是一棵二叉树,则可以按如下原则转换成森林F={T1,T2,……,Tm} 1)? 若B为空,则F为空; 2)? 若B非空,则F中第一棵树T1的根ROOT(T1)为二叉树B的根ROOT;第一棵树T1的子树森林F1是由B的左子树LB转换而成的森林;F中除了T1之外的其余树组成的森林F′={T2,T3,……,Tm}是由B的右子树RB转换而成的森林。 转换方法: ⑴ 加线——若某结点x是其双亲y的左孩子,则把结点x的右孩子、右孩子的右孩子、……,都与结点y用线连起来; ⑵ 去线——删去原二叉树中所有的双亲结点与右孩子结点的连线; ⑶ 层次调整 F H G E A I C D B F H G D C E B A I F E D C B A H G I 加线 去线 层次调整 I H G B C D A F E 6.4.3 树和森林的遍历 1. 树的遍历:有两种次序 先根(序)遍历:若树不空,则先访问根结点,然后依次先根遍历各棵子树。 后根(序)遍历:若树不空,则先依次后根遍历各棵子树,然后访问根结点。 例: 对树进行先根遍历,获得的先根序列是: 对树进行后根遍历,获得的后根序列是: A B C D E G H F I A B E F C D G H I E F B C G H I D A 2.森林的遍

文档评论(0)

1亿VIP精品文档

相关文档