本文介绍了树、森林和二叉树之间的转换策略,并且附有相关图片演示。最后还介绍了树与森林的通用遍历方式。对二叉树不了解的,建议先看这篇文章:二叉树的入门以及Java实现案例详解。
1 树转换为二叉树
对树采用孩子兄弟表示法即可,关于孩子兄弟表示法,可以看这篇文章:树结构的入门以及Java通用实现方式,其中的实现方法中有介绍。
树转换为二叉树的具体步骤:
加线。在所有兄弟结点之间加一条连线。
去线。对树中每个结点,只保留它与第一个孩子结点的连线,删除它与其他孩子结点之间的连线。
层次调整。以树的根结点为轴心,将整棵树顺时针旋转一定的角度,使之结构层次分明。注意第一个孩子是二叉树结点的左孩子,兄弟转换过来的孩子是结点的右孩子。
1.1 案例
如下一颗普通的树:
添加连线。在所有兄弟结点之间加一条连线。加线使用红色线表示:
删除连线。对树中每个结点,只保留它与第一个孩子结点的连线,删除它与其他孩子结点之间的连线。删除线使用虚线表示: