題目描述: 將一棵二元搜尋樹(BST)轉換為 Greater Sum Tree:每個節點的值變為原樹中所有大於等於該節點值的節點值之和。
解題思路:
時間複雜度:O(n) — 每個節點恰好訪問一次
空間複雜度:O(h) — h 為樹高,遞迴堆疊深度
1. Initialize cumulative sum = 0 2. Reverse in-order traversal (right -> root -> left): a. Recursively process right subtree b. Add current node's value to sum c. Set current node's value = sum d. Recursively process left subtree 3. Return root
迭代 + 棧:用棧模擬反向中序遍歷。先一路往右走到底,然後處理節點並轉向左子樹。避免遞迴,適合擔心棧溢出的情況。
Morris 遍歷:使用 Morris 反向中序遍歷,通過線索化實現 O(1) 額外空間。不需要遞迴棧或顯式棧,但會暫時修改樹的結構(遍歷完後恢復)。