java语言多叉树转化为二叉树_Java基础 - 多叉树、森林和二叉树之间的转换

/**

* @author wb

*

*森林、树和二叉树之间的转换

*有序树、森林和二叉树之间有一一映射的关系,可以相互转换。

*多叉树向二叉树转换的方法如下:

*(1)加虚线:同一个父节点的相邻兄弟节点之间加虚线。

*(2)抹实线:每个节点只保留它与最左子节点的连线,与其他子节点的连线都抹掉。

*(3)虚改实:虚线改为实线。

*例如,如图所示就是多叉树向二叉树转换的结果:

* A A

* │││ │ │ │ │

* B────┘CD E F └─────G B───┘

*│││ ││ │---> ││

* G─┘HI J─┘└─K LG────┘└──C

* ││ ││ ││ │

*M─┘N OP M───┘└──H └──D

*││ │

*└──N└── I└──E

* ││

*J──┘└──F

* ││

* O──┘└──K

*│

*图11.12多叉树转换为二叉树P

*

*多叉树转换成二叉树的思想就是:所有子节点只保留子节点,其他子节点转换为左子节点的右子节点链。

*按照这种思路,森林也可以转换成二叉树——只要把森林当成一棵根节点被删除的多叉树即可。如下图所示将森林转换成二叉树的结果:

* AB C A

*│││ │││││││ │

* D──┘E└─F G─┘H└─I J─┘K└─L D─────┘ └────B

*│││ ││ ││ ││---> ││ ││

* M─┘N└O P└Q R┘└S T┘└U M──┘└──E G─┘└─────C

* ││ ││ ││ ││ ││ │

*V┘└W X┘└YV─┘└─NP┘└─FR┘└H J──┘

*│ │││ │ ││

*└W └O └Q└S └I T┘└─K

* │ │ │

* X─┘ └U └─L

* │

*图11.13 森林转换为二叉树 └Y

*

*反过来,二叉树也可恢复出对应的多叉树、森林,恢复方法如下:

*(1)加虚线:如某节点I是父节点的左子节点,则为该节点I的右孩子链的所有节点分别与节点I的父节点添加连线。

*(2)抹线:把有虚线的节点与原父节点的连线抹去。

*(3)整理:虚改实并按层排列。

*如下图所示把二叉树转化为多叉树。

*A A

*│ ││ ││

* B─┘B─┘D F└─G

* ││--->│ │

* C─┘└─D B┘ E┘

*││

* E─┘└F

* │

* └G

*图11.14 二叉树转换为多叉树

*如下图所示把二叉树转化为森林。

* AACE

*││││││

* B─┘└─C B─┘└─D F─┘└─H

* │ │ │

* └D └E--->G─┘

*│

* F─┘

* ││

* G─┘└─H

*图11.15 二叉树转换为森林

*

** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

**如果二叉树的根节点的右子节点链只有一个节点,那么转换出来的森林将有两棵树;*

**如果二叉树的根节点的右子节点链有N个节点,那么转换出来的森林将有N+1棵树。*

** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

*/

你可能感兴趣的:(java语言多叉树转化为二叉树)