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向下取整就行了。

  • 相关阅读:
    selenium学习笔记05-selenium操作from表单
    selenium学习笔记04-webdriver核心方法的属性和使用
    selenium学习笔记03-selenium webdriver工作原理
    selenium学习笔记02-selenium定位的八大方法
    selenium学习笔记01
    微服务质量保证学习笔记(一)
    pytest,setup和teardown
    pytest用例编写规则、执行测试
    速耀达账套备份与恢复(速达二次开发)
    速耀达系统权限设置(速达二次开发)
  • 原文地址:https://www.cnblogs.com/23lalala/p/2703595.html
Copyright © 2011-2022 走看看