X32专项练习部分20
二叉树,树和森林的相互转换
/*
设F是由T1、T2和T3三棵树组成的森林
与F对应的二叉树为B,T1、T2和T3的结点数分别为N1、N2和N3
则二叉树B的根结点的左子树的结点数为()
正确答案: A 你的答案: 空 (错误)
N1-1
N2-1
N2+N3
N1+N3
考的是森林转换成二叉树
*树转换为二叉树
加线,在所有兄弟结点之间加一条连线。
去线,树中的每个结点,只保留它与第一个孩子结点的连线
删除它与其它孩子结点之间的连线
层次调整,以树的根节点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明
注意第一个孩子是结点的左孩子,兄弟转换过来的孩子是结点的右孩子
*森林转换为二叉树
先将森林中每棵树转换为二叉树
第一棵二叉树不动,从第二棵二叉树开始
依次把后一棵二叉树的根结点作为
前一棵二叉树的根结点的右孩子
然后用线连接起来
*二叉树转换为正常的树
加线,若某结点X的左孩子结点存在
则将这个左孩子的右孩子结点、右孩子的右孩子结点、右孩子的右孩子的右孩子结点...
都作为结点X的孩子
将结点X与这些右孩子结点用线连接起来
也就是说,当前节点左子树所有的右子节点,全都与当前节点连接
去线,删除原二叉树中所有结点与其右孩子结点的连线
新加的节点不管
层次调整
*二叉树转换为森林
从根节点开始,若右孩子存在,则把与右孩子结点的连线删除
再查看分离后的二叉树,若其根节点的右孩子存在,则连线删除
直到所有这些根节点与右孩子的连线都删除为止
将每棵分离后的二叉树转换为树
这道题就是森林转换为二叉树
可以参考我下面举得栗子
*/
树转换成二叉树
森林转换成二叉树
二叉树转换为树
二叉树转换为森林