Python程式:查詢指定範圍內的節點數量
假設我們有一個二叉搜尋樹 (BST),以及左右邊界l和r,我們需要找到根節點下所有值在l和r之間(包含l和r)的節點數量。
例如,
如果輸入為l = 7, r = 13,則輸出為3,因為存在三個節點:8、10、12。
為了解決這個問題,我們將遵循以下步驟:
stack := 一個棧,首先插入根節點;count := 0
當stack非空時,執行:
node := 棧頂元素,並彈出該元素
如果node非空,則:
如果l <= node的值 <= r,則
count := count + 1
stack := 將node的右子節點和左子節點壓入棧中
否則,如果node的值 < l,則
stack := 將node的右子節點壓入棧中
否則,
stack := 將node的左子節點壓入棧中
返回count
示例
from collections import deque 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, l, r): stack, count = [root], 0 while stack: node = stack.pop() if node: if l <= node.data <= r: count += 1 stack += [node.right, node.left] elif node.data < l: stack += [node.right] else: stack += [node.left] return count ob = Solution() root = TreeNode(12) root.left = TreeNode(8) root.right = TreeNode(15) root.left.left = TreeNode(3) root.left.right = TreeNode(10) print(ob.solve(root, 7,13))
輸入
root = TreeNode(12) root.left = TreeNode(8) root.right = TreeNode(15) root.left.left = TreeNode(3) root.left.right = TreeNode(10) 7,13
輸出
3
廣告