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

Posted icekx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求解完全二叉树的节点总数 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

 

以上是关于求解完全二叉树的节点总数 Python实现的主要内容,如果未能解决你的问题,请参考以下文章

求解具有n个结点的完全二叉树的深度,写出计算过程

求解具有n个结点的完全二叉树的深度,写出计算过程

如何求完全二叉树的度为1的结点个数

222完全二叉树的节点个数

js 数据结构 树(二叉搜索树的实现)

Leetcode刷题Python222. 完全二叉树的节点个数