声明:以下为个人见解,若有误,可评论指出
题目:已知一棵有 2011个结点的树,其叶结点个数为116,该树对应的二叉树中无右孩子的结点个数是 ___。【2011年全国试题6(2分)】
A.115
B.116
C.1895
D.1896
该题也可看做:已知一棵有S个结点的树,其叶结点个数为n,求该树对应的二叉树中无右孩子的结点个数。
解题过程:
我们已知一棵有S个结点的树必由叶结点(终端结点)和分支结点(非终端结点)构成,设该树分支结点个数为m。则 S = n + m。
当树转换为二叉树时,每个结点有两个指针域(左指针域和右指针地域),总指针域个数为2S。分支结点的左指针域必不为空(因为分支结点至少有一个孩子,而左指针域指向它的第一个孩子),则所有左指针域为空的结点都为原始树的叶结点,可得原始树的叶结点个数 = 转换的二叉树中左指针域为空的个数。
注:原始树的叶结点个数大于等于转换的二叉树的叶结点个数。转换的二叉树的叶结点个数 = 转换的二叉树中左右指针域均为空的个数,而转换的二叉树中左右指针域均为空的个数小于等于转换的二叉树中左指针域为空的个数,又由上段结论可推得原始树的叶结点个数大于等于转换的二叉树的叶结点个数。
已知一个非空指针域对应一个两结点间的连线,而该连线数为总结点数减一:S-1(只有根结点没有双亲,没有该连线,其余结点均可对应一条连线)。则非空指针域个数为S-1。
由上可知:空指针域个数 = 2S - (S - 1) = S + 1
又S = n + m,得空指针域个数 = n + m + 1。空指针域个数 = 左空指针域个数 + 右空指针域个数 = n + 右空指针域个数。可推出右空指针域个数 = m + 1,即右空指针域个数 = 分支结点(非终端结点)个数 + 1。而该树对应的二叉树中无右孩子的结点个数就等于右空指针域个数,则只要求出分支结点个数再加一即为答案。则上题答案为:2011 - 116 + 1 = 1896(D)
综上所述,可以得到如下结论:
一棵分支结点(非终端结点)个数为n的树,该树对应的二叉树中无右孩子的结点(或右指针域为空的结点)个数为 n + 1。【森林对应二叉树时也适用,上述过程推导主要涉及对应后的二叉树】
其他推导中所得的结论:
原始树(或森林)的叶结点个数 = 转换的二叉树中左指针域为空的个数
非空指针域个数 = 总结点个数 - 1
空指针域个数 = 总结点个数 + 1
下面的题目都可以用上述结论解答:
题目:将森林F转换为对应的二叉树T,F中叶结点的个数等于__。【2014年全国试题】
A.T中叶结点的个数
B.T中度为1的结点个数
C.T中左孩子指针为空的结点个数
D.T中右孩子指针为空的结点个数
解答:直接用结论原始树(或森林)的叶结点个数 = 转换的二叉树中左指针域为空的个数,则F中叶结点的个数等于(C)T中左孩子指针为空的结点个数。
题目:设F是一个森林,B是由F变换得到的二叉树。F中有n个非终端结点,则B中右指针域为空的结点有__个。【王道数据结构复习指导】
A.n - 1
B.n
C.n + 1
D.n + 2
解答:直接用上述结论 一个分支结点(非终端结点)个数为n的森林,该树对应的二叉树中无右孩子的结点(或右指针域为空的结点)个数为 n + 1,则答案为C。