• 求解完全二叉树的节点总数 Python实现


    1.利用一般递归即可求得

    1 def getNodeNums(head):
    2     if not head:
    3         return 0
    4     lnums = getNodeNums(head.left)
    5     rnums = getNodeNums(head.right)
    6     return lnums + rnums + 1

    2.利用完全二叉树的特性递归(时间复杂度O(logn*logn))

     1 # 利用完全二叉树特性,使用递归 时间复杂度:O(logn*logn)
     2 # 满二叉树节点总个数为2**n-1
     3 def nodeNums(head):
     4     if not head:
     5         return 0
     6     return bs(head, 1, mostLeftLevel(head, 1)) 
     7 
     8 # 求当前节点的节点总数
     9 def bs(node, level, height):
    10     if level == height:
    11         return 1
    12         # 如果当前节点的右子节点等于父节点深度减一,即当前节点的左子树为满二叉树
    13     if mostLeftLevel(node.right, level+1) == height: 
    14         # 返回左子树节点数+父节点+右子树节点数                    
    15         return 2**(height-level) + bs(node.right, level+1, height)     
    16     else:       
    17         # 如果右子节点深度不等于父节点深度减一,又此树为完全二叉树,即右子树为满二叉树  
    18         # 返回右子树节点数+父节点+左子树节点数
    19         return 2**(height-level-1) + bs(node.left, level+1, height)     
    20 
    21 # 根据完全二叉树特征求当前节点的深度
    22 def mostLeftLevel(node, level):        
    23     while node:
    24         level += 1
    25         node = node.left
    26     return level - 1
  • 相关阅读:
    初学Android: 四大组件之Activity
    jQuery Pagination Plugin ajax分页控件
    PHPExcel 多工作表 导入
    PHPExcel 多工作表 导出
    js常用方法
    如何让多个不同版本的jquery库共存
    总结机器学习部分计算原理—续
    第四周学习进度报告
    总结机器学习部分计算原理
    数据清洗报告
  • 原文地址:https://www.cnblogs.com/icekx/p/9131786.html
Copyright © 2020-2023  润新知