leetcode94. 二叉树的中序遍历
题目描述:
给定一个二叉树的根节点 root ,返回它的 中序 遍历。 示例:
输入: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 春招闯关活动」, 点击查看活动详情