1. 程式人生 > 其它 >iOS LeetCode ☞ 二叉樹的中序遍歷

iOS LeetCode ☞ 二叉樹的中序遍歷

給定一個二叉樹的根節點 root ,返回它的 中序 遍歷。

示例 1:
在這裡插入圖片描述

輸入:root = [1,null,2,3]
輸出:[1,3,2]

示例 2:

輸入:root = []
輸出:[]

示例 3:

輸入:root = [1]
輸出:[1]

示例 4:
在這裡插入圖片描述

輸入:root = [1,2]
輸出:[2,1]

示例 5:
在這裡插入圖片描述

輸入:root = [1,null,2]
輸出:[1,2]

提示:

  • 樹中節點數目在範圍 [0, 100]
  • -100 <= Node.val <= 100

解題思路

首先我們需要了解什麼是二叉樹的中序遍歷:按照訪問左子樹——根節點——右子樹的方式遍歷這棵樹,而在訪問左子樹或者右子樹的時候我們按照同樣的方式遍歷,直到遍歷完整棵樹。因此整個遍歷過程天然具有遞迴的性質,我們可以直接用遞迴函式來模擬這一過程。

定義 inorder(root) 表示當前遍歷到 root 節點的答案,那麼按照定義,我們只要遞迴呼叫 inorder(root.left) 來遍歷 root 節點的左子樹,然後將 root 節點的值加入答案,再遞迴呼叫inorder(root.right) 來遍歷 root 節點的右子樹即可,遞迴終止的條件為碰到空節點。

程式碼

	// 94. 二叉樹的中序遍歷
    func inorderTraversal(_ root: TreeNode?) -> [Int] {
        var res = [Int](repeating: 0, count: 0)
        
        func
inorder(_ root: TreeNode?) { if root == nil { return } inorder(root?.left) res.append(root!.val) inorder(root?.right) } inorder(root) return res }