【发布时间】:2011-04-22 21:56:05
【问题描述】:
N 叉树的每个节点都有 N 个子节点。如果树有M个非叶子节点,如何找到叶子节点的个数?
【问题讨论】:
标签: data-structures tree
N 叉树的每个节点都有 N 个子节点。如果树有M个非叶子节点,如何找到叶子节点的个数?
【问题讨论】:
标签: data-structures tree
首先,如果根是级别0,那么树的第K 级别将有N^K 节点。您可以开始逐级递增计数器,直到获得M 节点。这样,您将发现树由多少个级别组成。而叶子节点的数量就是最后一层的节点数量——它是N^lastLevel。
这是一个例子:N = 3, M = 4。
First level = 3^0 = 1
Second level = 3^1 = 3
1 + 3 = 4
所以我们发现这棵树有两个层次(从 0 开始计数)。
答案是3^2 = 9。
注意:您也可以直接找到级别编号,注意M 是几何级数的总和:1 + 3 + 9 + 27 ... = M
希望清楚。
【讨论】:
从数学上讲,节点以几何级数增加。
第 0 级 - 1
第一级 - n
第二级 - n ^2
第三级 - n ^ 3
……
第 m 级 - n ^ m
所以第m-1层的节点总数为1 + n + n^2 + .. + n ^ m-1。
现在有一个很好的公式来计算 1 + a + a^2 + a^3 + ... + a^m ,即 (1 - n^(m+1))/(1-n),我们称这个量为 K。
现在我们需要的是叶子节点的数量n ^ m,我们拥有的是K,即非叶子节点的总数。做一些数学公式调整你会发现
n ^ m = K *(n-1) + 1。
例如假设在三叉树中,非叶节点的总数是 40,然后使用这个公式,你得到叶节点的总数为 81,这是正确的答案。
【讨论】: