iOS LeetCode ☞ 二叉樹的中序遍歷
阿新 • • 發佈:2021-05-27
給定一個二叉樹的根節點 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
}