作业帮 > 数学 > 作业

完全二叉树节点数问题假如,我现在知道有N个叶子结点,这N个叶子结点两两组合以值较小的那个结点的值做根结点形成一个子树,依

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/05/04 16:28:35
完全二叉树节点数问题
假如,我现在知道有N个叶子结点,这N个叶子结点两两组合以值较小的那个结点的值做根结点形成一个子树,依此类推,产生的子树再两两组合形成一个子树,那么最后形成的树的结点总数为2*N-1个,请问这个公式是怎么推出来的?
如:已知道叶结点有 1 2 3 5
1
2 1
2 5 3 1
你好 是这样的:
第1次必定是2个叶子组成二叉树,产生1新结点,接下来有2种情况:
1.此新结点与原剩下的叶子再组成二叉树又产生1新结点,这样就只有第1次时由2个叶子产生1新结点,以后每次由1叶子与新结点产生新结点,故n个叶子共有2n-1个结点.
2.剩下的叶子中又有2个叶子(比第1次产生的新结点权小)结合产生新结点,其它类似,那么必然会由2个都是新结点再产生新结点,所以实际上数量与第1种一样,共有2n-1个.
具体证明用一个构造哈夫曼树的算法,如下:
设叶子节点个数为n,度为1的节点个数为m,度为2的节点个数为l.
显然易知:一颗二叉树的节点数 = 这个树的度加1(因为每个节点都是前一个节点的度,根节点除外,所以要加1)
故有 l + m + n = 2l + m + 1
----> n = l + 1
由于哈夫曼树没有度为1的节点,在m = 0
总节点 = n + m + l = 2n - 1