zoukankan      html  css  js  c++  java
  • 求三叉树高度

    有12345个结点的满3叉数的高度为_____写出计算过程

                                    1                      层:1 节点数:1
                         /          |              \              
                       2           3               4              层:2 节点数:3
                     / | \       / | \            / | \
                    5 6 7     8 9 10       11 12 13          层:3 节点数:9

    满三叉树每层节点数目
    假设k-1层有n个节点 那么第k层就应该有3n个节点。也就是说这是一个首项是1,公比是3的等比数列。第n层节点数an可以表示为
              an=a1*q^(n-1) = 1*3(n-1) = 3^(n-1)   

    满三叉树总的节点数目
    总的节点数目就是对各层节点数目求和,每层的节点数目计算公式已经有了。然后就是公比数列求和就行了。一个高位n的满三叉树总节点个数
              sn = a1*(1-q^n)/(1-q) = 1*(1-3^n)/(1-3) = (3^n-1)/2
             
    其实有了这个公式这题就可以做了,可以估计一下。求得一个n和n+1让12345在sn和sn'之间就行了。

    下面给出一个较为严格的推导。
                                 ....
                               /.......\      
                                    (3^(k-1)-1)/2   层:k-1
                          /                 \    
                 (3^(k-1)+1)/2   (3^k-1)/2    层:k
    设一个有n层的满三叉树的节点总数为n,那么
                   (3^(k-1)+1)/2  <= n <= (3^k-1)/2
                  
                   3^(k-1)+1 <= 2n
                   3^k-1 >= 2n

                   k <= log3(2n - 1) - 1
                   k >= log3(2n + 1)
                  
    对k向下取整就行了。

  • 相关阅读:
    解决org.apache.jasper.JasperException: Failed to load or instantiate TagLibraryVal
    学java快2月了,对其应该有点清晰的认识了
    Linux(CentOS)挂载移动硬盘
    SEVERE: A child container failed during start
    JSTL 标签 详解
    转载自MSDN:Implementing a Membership Provider
    一个比较实用的服务器端模拟客户端Alert的代码
    简单的SQL分页法
    转载:Global.asax 文件 使用参考
    转载:缓存 Cache
  • 原文地址:https://www.cnblogs.com/23lalala/p/2703595.html
Copyright © 2011-2022 走看看