设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有多少个
森林转二叉树:
- 将森林中每棵树转换成相应的二叉树;
- 第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树根结点的右孩子,当所有二叉树连起来后,此时,所得二叉树即是森林转换得到的。
第一步:每棵树转二叉树
第二步:二叉树合并
二叉树转森林
- 若某结点是其双亲的左孩子则把该结点的右孩子,右孩子的右孩子…都与该结点的双亲结点用线连起来;
- 删除原二叉树中所有的双亲结点与右孩子结点间的连线;
- 整理上两步所得的树/森林,使之结构层次分明。
本题思路:(非终端节点即非叶子结点)
右指针域为空个数 = 总的空指针域个数 - 左指针域为空的个数
-
题目非终端结点为n,那么假设设森林总结点为m,终端结点(即叶子结点)为 m-n,总指针域就是2*m。
-
根据二叉树的特性,可知,在m个结点的二叉链表中,有
m+1
个空指针域。除根节点外,每个结点直接都被其父结点指向,使用的指针域为m-1,所以空指针域为 2*m -(m-1) = m+1
-
终端结点转化为二叉树后,该结点没有左孩子,左指针域就为空,即
m-n
。因为森林转二叉树后,左孩子是第一个孩子,右孩子是兄弟,所以终端结点转化后一定无左孩子,右孩子可能有也可能没有,也就是说转化后有两种可能,一是仍为叶子结点,二为不再是叶子结点,但只有右孩子。
-
所以右指针域为空的个数为:m + 1 -(m - n) = n + 1。
答案即为
n + 1