#define MaxTreeSize 200 //树中能够保存的最大节点个数//树的定义template <typename T>class Tree{public: Tree() //构造函数 { for (int i = 0; i < MaxTreeSize; ++i) { m_data[i].parent = -1; //-1表示目前还没有父亲,类似于空指针的作用 } m_length = 0; }private: TreeNode<T>...
5. 二叉树转换成森林 抹线:将二叉树中根结点与其右孩子连线,及沿右分支搜索到的所有右孩子间连线全部抹掉,使之变成孤立的二叉树 还原:将孤立的二叉树还原成树(二叉树→树) 如图:
#define MaxTreeSize 200 //树中能够保存的最大节点个数 //树的定义 template <typename T> class Tree { public: Tree() //构造函数 { for (int i = 0; i < MaxTreeSize; ++i) { m_data[i].parent = -1; //-1表示目前还没有父亲,类似于空指针的作用 } m_length = 0; } private: Tree...
1.森林转换成二叉树 a).将各个树转换成对应的二叉树 b).按森林图形中树的先后次序,依次将后边一棵二叉树作为前边一棵二叉树根结点的右子树。 如图: 2.二叉树转换成森林 a).抹线,将二叉树的根节点与其右节点即沿着改节点的右链的所有右节点连线抹除,形成多颗二叉树。 b).将各个二叉树转换成一般树。
森林转换为二叉树其实和树类似,从上面树转换二叉树的过程中可以看到,树转换为二叉树之后根结点一定是没有右孩子的,所以只需将后面的树作为第一棵树转换为二叉树后根结点的右孩子即可。 (1)把每棵树转换为二叉树。 (2)第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根...
一般来说,直接对一般树做一些相关操作非常对不方便。因此,将一般树转换为二叉树,操作完成后逆转为一般树成为了大部分人对付一般树的方法。 一般树转换二叉树: 1)将每一个结点与他的兄弟结点之间连一条线。 2)对每一个双亲结点,只保留它与第一个子结点的连线,删除与其余结点的连线。 3)整理,左右摆齐。 a ...
小白的数据结构与算法学习笔记(二十二)---树、森林及二叉树的相互转换,程序员大本营,技术文章内容聚合第一站。
树、森林与二叉树的相互转换 继续小结: 树向二叉树的转换,树的根节点还是二叉树的根节点,根的子树森林构成一棵树二叉树作为根节点的左子树。 二叉树向树的转换则需要一些条件,这个条件是什么呢?就是这颗二叉树没有右子树。要明白一点,右子树都是兄弟,左子树都是孩子(左子右兄)。同时也能知道如果树用二叉链表...
森林转换为二叉树 (1)把每棵树转换为二叉树。 (2)第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,用线连接起来。 二叉树转换为树 是树转换为二叉树的逆过程。 (1)加线。若某结点X的左孩子结点存在,则将这个左孩子的右孩子结点、右孩子的右孩子结点...
树,森林与二叉树的转换: 树转换为二叉树: 1;加线:在所有兄弟结点之间加一条连线 2;去线:对树中每个结点,只保留它与第一个孩子结点的连线,删除它与其他孩子结点之间的连线。 3;层次调整;以树的根结点为轴心,将整棵树顺时针旋转一定的角度,使之结构层次分明。(第一个孩子是二叉树结点的左孩子,兄弟转换过来的...