Java基础 - 多叉树、森林和二叉树之间的转换
2016-11-22 16:26
267 查看
/** * @author wb * * 森林、树和二叉树之间的转换 * 有序树、森林和二叉树之间有一一映射的关系,可以相互转换。 * 多叉树向二叉树转换的方法如下: * (1)加虚线:同一个父节点的相邻兄弟节点之间加虚线。 * (2)抹实线:每个节点只保留它与最左子节点的连线,与其他子节点的连线都抹掉。 * (3)虚改实:虚线改为实线。 * 例如,如图所示就是多叉树向二叉树转换的结果: * A A * │││ │ │ │ │ * B────┘CD E F └─────G B───┘ * │││ ││ │ ---> ││ * G─┘HI J─┘└─K L G────┘└──C * ││ │ │ ││ │ * M─┘N O P M───┘└──H └──D * │ │ │ * └──N └── I └──E * ││ * J──┘└──F * ││ * O──┘└──K * │ * 图11.12多叉树转换为二叉树 P * * 多叉树转换成二叉树的思想就是:所有子节点只保留子节点,其他子节点转换为左子节点的右子节点链。 * 按照这种思路,森林也可以转换成二叉树——只要把森林当成一棵根节点被删除的多叉树即可。如下图所示将森林转换成二叉树的结果: * A B 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┘└Y V─┘└─N P┘└─F R┘└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 二叉树转换为多叉树 * 如下图所示把二叉树转化为森林。 * A A C E * 4000 ││ ││ ││ * B─┘└─C B─┘└─D F─┘└─H * │ │ │ * └D └E ---> G─┘ * │ * F─┘ * ││ * G─┘└─H * 图11.15 二叉树转换为森林 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 如果二叉树的根节点的右子节点链只有一个节点,那么转换出来的森林将有两棵树; * * * 如果二叉树的根节点的右子节点链有N个节点,那么转换出来的森林将有N+1棵树。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
相关文章推荐
- java 多线程基础--各种状态及状态之间的转换
- 11.14数据结构----二叉树,树,森林之间的转换
- 树、二叉树、森林之间的转换方法
- [分享]Java中Byte与基础类型之间的转换
- 二叉树、树、森林之间的转换
- 森林、树与二叉树之间的转换
- daliu_it java基础笔记之 变量和数据类型以及数据类型之间的转换以及转义字符
- [分享]Java中Byte与基础类型之间的转换
- Java_语法基础_字符串与数字之间的转换
- 二叉树与树、森林之间的转换
- java基础——进制和进制之间的转换
- 树,森林,二叉树之间的转换
- java 多线程基础--各种状态及状态之间的转换
- 树、森林和二叉树之间的转换
- java基础数据类型与字符串之间的转换
- java中String与基础类型之间的转换
- Java基础-数据类型及其之间的转换
- java基础之基本数据类型及之间的转换
- 树。森林。和二叉树之间的转换
- java基础类型数据与String类包装类之间的转换与理解