求解完全二叉樹的節點總數 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM