使用 Python 查詢良好葉子節點對的數量的程式
假設我們有一棵二叉樹,以及另一個值距離 d。當這兩個節點之間的最短路徑小於或等於距離 d 時,一對兩個不同的葉子節點被稱為良好的。
因此,如果輸入類似於
並且距離 d = 4,則輸出將為 2,因為對是 (8,7) 和 (5,6),因為它們的路徑長度距離為 2,但 (7,5) 或 (8,6) 或其他對不是好的,因為它們的路徑長度為 5,大於 d = 4
為了解決這個問題,我們將遵循以下步驟 -
sol := 0
定義一個函式 util()。這將接收根節點
如果根節點為空,則
返回一個新的列表
如果根節點是葉子節點,則
返回一個包含一對 [0, 0] 的陣列
否則,
cur := 一個新的列表
l := util(根節點的左子樹)
r := util(根節點的右子樹)
對於 l 中的每個節點 n,執行
n[1] := n[1] + 1
對於 r 中的每個節點 n,執行
n[1] := n[1] + 1
對於 r 中的每個節點 n,執行
對於 l 中的每個節點 n1,執行
如果 n[1] + n1[1] <= d,則
sol := sol + 1
返回 l+r
從主方法執行以下操作 -
util(根節點)
返回 sol
讓我們檢視以下實現以更好地理解 -
示例
class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right class Solution: def __init__(self): self.sol = 0 def solve(self, root, d): def util(root): if not root: return [] if not root.left and not root.right: return [[0, 0]] else: cur = [] l = util(root.left) r = util(root.right) for n in l: n[1] += 1 for n in r: n[1] += 1 for n in r: for n1 in l: if n[1] + n1[1] <= d: self.sol += 1 return l+r util(root) return self.sol root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.right = TreeNode(4) root.left.right.left = TreeNode(8) root.left.right.right = TreeNode(7) root.right.left = TreeNode(5) root.right.right = TreeNode(6) d = 4 ob = Solution() print(ob.solve(root, d))
輸入
root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.right = TreeNode(4) root.left.right.left = TreeNode(8) root.left.right.right = TreeNode(7) root.right.left = TreeNode(5) root.right.right = TreeNode(6) d = 4
輸出
2
廣告