数据结构习题:设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有多少个

设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有多少个

森林转二叉树:

  1. 将森林中每棵树转换成相应的二叉树;
  2. 第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树根结点的右孩子,当所有二叉树连起来后,此时,所得二叉树即是森林转换得到的。

数据结构习题:设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有多少个

第一步:每棵树转二叉树
数据结构习题:设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有多少个
第二步:二叉树合并

数据结构习题:设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有多少个

二叉树转森林

  1. 若某结点是其双亲的左孩子则把该结点的右孩子,右孩子的右孩子…都与该结点的双亲结点用线连起来;
  2. 删除原二叉树中所有的双亲结点与右孩子结点间的连线;
  3. 整理上两步所得的树/森林,使之结构层次分明。

本题思路:(非终端节点即非叶子结点)

右指针域为空个数 = 总的空指针域个数 - 左指针域为空的个数

  1. 题目非终端结点为n,那么假设设森林总结点为m,终端结点(即叶子结点)为 m-n,总指针域就是2*m。

  2. 根据二叉树的特性,可知,在m个结点的二叉链表中,有 m+1 个空指针域。

    除根节点外,每个结点直接都被其父结点指向,使用的指针域为m-1,所以空指针域为 2*m -(m-1) = m+1

  3. 终端结点转化为二叉树后,该结点没有左孩子,左指针域就为空,即m-n

    因为森林转二叉树后,左孩子是第一个孩子,右孩子是兄弟,所以终端结点转化后一定无左孩子,右孩子可能有也可能没有,也就是说转化后有两种可能,一是仍为叶子结点,二为不再是叶子结点,但只有右孩子。

  4. 所以右指针域为空的个数为:m + 1 -(m - n) = n + 1。

    答案即为 n + 1