Python程式:查詢二叉樹的最大寬度
假設我們有一個二叉樹,我們需要找到樹中任何一層的最大寬度。這裡,一層的寬度是指可以在最左節點和最右節點之間容納的節點數量。
因此,如果輸入類似於

則輸出將為 2
為了解決這個問題,我們將遵循以下步驟:
建立一個對映 d,用於儲存最小值和最大值,最小值最初為無窮大,最大值為 0。
定義一個函式 dfs()。它將接收根節點、位置 pos(初始值為 0)和深度 depth(初始值為 0)。
如果根節點為空,則返回。
d[深度, 0] 等於 d[深度, 0] 和 pos 的最小值。
d[深度, 1] 等於 d[深度, 1] 和 pos 的最大值。
dfs(節點的左子節點, 2*pos, 深度+1)
dfs(節點的右子節點, 2*pos+1, 深度+1)
在主方法中,執行以下操作:
dfs(根節點)
mx := 0
對於 d 所有值的列表中的每個最小-最大對,執行以下操作:
left := min, right := max
mx := mx、right-lelf+1 的最大值
返回 mx
讓我們看看以下實現以更好地理解:
示例
即時演示
from collections import defaultdict class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right class Solution: def solve(self, root): d=defaultdict(lambda: [1e9,0]) def dfs(node, pos=0, depth=0): if not node: return d[depth][0]=min(d[depth][0],pos) d[depth][1]=max(d[depth][1],pos) dfs(node.left,2*pos,depth+1) dfs(node.right,2*pos+1,depth+1) dfs(root) mx=0 for interval in d.values(): l,r=interval mx=max(mx,r-l+1) return mx ob = Solution() root = TreeNode(5) root.left = TreeNode(1) root.right = TreeNode(9) root.right.left = TreeNode(7) root.right.right = TreeNode(10) root.right.left.left = TreeNode(6) root.right.left.right = TreeNode(8) print(ob.solve(root))
輸入
root = TreeNode(5) root.left = TreeNode(1) root.right = TreeNode(9) root.right.left = TreeNode(7) root.right.right = TreeNode(10) root.right.left.left = TreeNode(6) root.right.left.right = TreeNode(8)
輸出
2
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP