码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-06-04 11:50:28      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:返回   特性   复杂   pre   时间复杂度   eve   nod   完全二叉树   pytho   

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

 

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

标签:返回   特性   复杂   pre   时间复杂度   eve   nod   完全二叉树   pytho   

原文地址:https://www.cnblogs.com/icekx/p/9131786.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!