leetcode94. 二叉树的中序遍历|刷题打卡

94 阅读1分钟

leetcode94. 二叉树的中序遍历

题目描述:

给定一个二叉树的根节点 root ,返回它的 中序 遍历。 示例:

alg@2x.png

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

代码模版(swift)

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public var val: Int
 *     public var left: TreeNode?
 *     public var right: TreeNode?
 *     public init() { self.val = 0; self.left = nil; self.right = nil; }
 *     public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
 *     public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
 *         self.val = val
 *         self.left = left
 *         self.right = right
 *     }
 * }
 */
class Solution {
    func inorderTraversal(_ root: TreeNode?) -> [Int] {

    }
}

思路(递归)

中序遍历(LDR)是二叉树遍历的一种,也叫做中根遍历、中序周游。在二叉树中,中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。

根据中序遍历的定义,我们只需要递归遍历左子树,添加根节点,递归遍历右子树即可。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public var val: Int
 *     public var left: TreeNode?
 *     public var right: TreeNode?
 *     public init(_ val: Int) {
 *         self.val = val
 *         self.left = nil
 *         self.right = nil
 *     }
 * }
 */
class Solution {
    var ans = [Int]()
    func inorderTraversal(_ root: TreeNode?) -> [Int] {
        dfs(root)
        return ans
    }
    
    func dfs(_ root: TreeNode?) {
        if root != nil {
            dfs(root!.left) // 遍历左子树
            ans.append(root!.val) // 添加根节点
            dfs(root!.right) // 遍历右子树
        }
    }
}

本文正在参与「掘金 2021 春招闯关活动」, 点击查看活动详情