【问题标题】:Finding the no of leaf nodes查找叶子节点的数量
【发布时间】:2011-04-22 21:56:05
【问题描述】:

N 叉树的每个节点都有 N 个子节点。如果树有M个非叶子节点,如何找到叶子节点的个数?

【问题讨论】:

    标签: data-structures tree


    【解决方案1】:

    首先,如果根是级别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

    希望清楚。

    【讨论】:

      【解决方案2】:

      从数学上讲,节点以几何级数增加。

      第 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,这是正确的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-21
        • 2023-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-10
        • 2012-09-29
        • 2023-03-19
        相关资源
        最近更新 更多