一、树转换为二叉树
【1】每个双亲对他的第一个孩子结点不变,其他孩子断开联系
【2】同辈的由长子带领,长子依次联系其他兄弟
【3】调整位置,双亲与孩子的联系放左边,兄弟之间的联系放右边
A A
↙ ↓ ↘ ↙
B C D ————→ B → C → D
↙ ↓ ↘ ↓ ↙ ↘ ↙ ↓ ↙
E F G H I J E → F → G H I → J
【1】【树】 【2】【二叉树】
A
↙
B
↙ ↘
E C
F H D
↘ ↙
G I
↘
J
【3】【调整位置】
其实就是转换成了 孩子兄弟表达法。
二、森林转换成二叉树
【1】每个树转换成二叉树,通过上面树转二叉树,即孩子兄弟表示法
【2】第一棵二叉树不变,第二棵二叉树开始,依次把后一棵树二叉树的根结点作为前一棵二叉树的根结点的右孩子。循环
A E G A E G A E G
↙ ↓ ↘ ↓ ↙ ↘ ————→ ↙ ↓ ↙ ————→ ↙ ↙ ↙
B C D F H I B → C → D F H → I B F H
↓ ↓ ↘ ↙ ↘
J J C J I
↘
D
【1】【森林 转 森林二叉树】
A
↙
B E
↘ ↙ ↘
C F G
↘ ↙
D H
↙ ↘
J I
【2】【森林二叉树 转 二叉树】
★【还有一种更加直观的方法】
【1】把森林的每一个根结点 当做是个兄弟,森林
【2】对其树转二叉树
【】 【】 【】
↙ ↓ ↘ ↙ ↙
A E G A → E → G A
↙ ↓ ↘ ↓ ↙ ↘ ————→ ↙ ↓ ↙ ————→ ↙ ↘
B C D F H I B → C → D F H → I B E
↓ ↓ ↘ ↙ ↘
J J C F G
↘ ↙
D H
↙ ↘
J I
【1】【森林 转 树】 【2】【树 转 二叉树】
森林转换成二叉树
如果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} 转换而成的二叉树
B的右子树RB是从森林F‘ = { T2,T3,.....,Tm}转换而来的二叉树。
三、二叉树转换成树
二叉树转成树,是树转成二叉树的倒置版。
【2】加线,若某结点的左孩子结点存在,则将这个左孩子的右孩子结点,右孩子的右孩子……(父母要联系所有孩子)
【1】去线,删除二叉树中所有结点和右孩子结点的连线。(兄弟之间断开联系)
【3】层次调整。
A A A
↙ ↙ ↓ ↘ ↙ ↓ ↘
B B ↓ ↓ B C D
↙ ↘ ↙ ↓ ↓ ↘ ↙ ↘ ↙
E C E ↓ C ↓ E F G
↘ ↘ ↓ ↓
F D F D
↙ ↙
G G
【1】【2】【加线去线】 【3】【层次调整】
很直观的就是,像B,C,D这样的右斜切,逆时针旋转45度,就完成了二叉树转树
四、二叉树转换成森林
是森林转换成二叉树的倒置版
【1】根节点开始,右孩子存在,切断右孩子……循环邱丹,分离二叉树,即将第一个右斜切切断
【2】将每棵分离后的二叉树转换成树。采用上面的二叉树转换成树,就转换成森林了
A A
↙ ↘ ↙
B E B E
↘ ↙ ↘ ↘ ↙
C F G C F G
↘ ↙ ↘ ↙
D H D H
↙ ↘ ↙ ↘
J I J I
【1】【第一个右斜切切断】(ABCD,EF,GHJI分为三块)
A E G
↙ ↓ ↘ ↓ ↙ ↘
B C D F H I
↓
J
二叉树转换成森林
如果B=(root,LB,RB)是一棵二叉树,则可按如下规则转换成森林F={ T1,T2,....,Tm }
(1)若B为空,则F为空。
(2)若B非空,则F中第一棵树T1的根root即为二叉树B的根root;
T1中根结点的子树森林F1是由B的左子树LB转换而成的森林;
F中除T1之外其余树组成的森林F‘ = { T2,T3,.....,Tm}是由B的右子树RB转换而成的森林。