LC 144. 二叉树的前序遍历 (opens new window) (opens new window)
简单
# 问题描述
给你一棵二叉树的根节点 root
,返回它节点值的 前序遍历 。
示例 1:
输入:root = [1,null,2,3]
输出:[1,2,3]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
示例 4:
输入:root = [1,2]
输出:[1,2]
示例 5:
输入:root = [1,null,2]
输出:[1,2]
提示:
- 树中节点数目在范围
[0, 100]
内 -100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
# 递归
所谓二叉树的前序遍历:其实是按照访问根节点——左子树——右子树这样的的方式遍历这棵树,而当访问左子树或者右子树的时候,我们按照同样的方式遍历,直到遍历完整棵树。我们可以用递归函数来模拟这一过程。
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
var preorderTraversal = function (root) {
if (!root) return []
let ans = []
ans.push(root.val)
ans.push(...preorderTraversal(root.left))
ans.push(...preorderTraversal(root.right))
return ans
}
- 时间复杂度:
- 空间复杂度:
# 迭代
迭代方式需要使用栈结构去模拟递归过程。
对于使用迭代方式对二叉树进行遍历,无论是前序遍历、中序遍历、后序遍历,只是遍历的顺序不同,这里提供了一个迭代的模板,对于不同的遍历,只需修改几行代码的顺序即可实现对应的效果。
- 时间复杂度:
- 空间复杂度:
上次更新: 2023/01/31 19:48:05
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 , 转载请注明出处!