LeetCode 94.二叉樹的中序遍歷
阿新 • • 發佈:2020-07-19
給定一個二叉樹,返回它的中序 遍歷。 示例: 輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [1,3,2] 進階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎? ## 迭代 class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: """ 使用棧記錄節點,後進先出。 使用顏色標記節點的狀態,新節點為白色,已訪問的節點為灰色。 如果遇到的節點為白色,則將其標記為灰色,然後將其右子節點、自身、左子節點依次入棧。 如果遇到的節點為灰色,則將節點的值輸出。 """ WHITE, GRAY = 0, 1 res = [] stack = [(WHITE, root)] while stack: color, node = stack.pop() if node is None: continue if color == WHITE: stack.append((WHITE, node.right)) stack.append((GRAY, node)) stack.append((WHITE, node.left)) else: res.append(node.val) return res ## 遞迴 class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: res = [] self.helper(root, res) return res def helper(self, root, res): if root: self.helper(root.left, res) res.append(root.val) self.helper(root.right, res)