題目描述:驗證一棵二元樹是否為有效的二元搜尋樹(每個節點的左子樹均小於節點值,右子樹均大於節點值)。
解題思路:DFS 搭配最小/最大值邊界:遞迴時傳入當前節點必須滿足的值域範圍 (min, max)。根節點範圍為 (-inf, +inf);走左子樹時,更新上界為當前節點值;走右子樹時,更新下界。若任意節點違反邊界則無效。
時間複雜度:O(n) — 每個節點訪問一次。
空間複雜度:O(h) — 遞迴棧深度(h 為樹高)。
1. validate(node, min=-inf, max=+inf): a. If null: return true b. If node.val <= min or node.val >= max: return false c. Return validate(node.left, min, node.val) AND validate(node.right, node.val, max) 2. Return validate(root, -inf, +inf)
中序遍歷檢查遞增 O(n) 時間,O(h) 空間:遞迴中序遍歷,檢查序列是否嚴格遞增 — 邏輯相同。
層序遍歷 O(n) 時間,O(w) 空間:BFS 逐層維護邊界 — 空間複雜度可能更差。