题目
给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3] 输出: [1,2,3]
思路
前序遍历:先遍历根节点,再遍历左子树,最后遍历右子树。
对于二叉树的遍历问题,我们可以使用递归和迭代两种方法。
本题采用递归的方式实现前序遍历。具体思路是:先访问根节点,再递归遍历左子树,最后递归遍历右子树。
代码如下:
function preorderTraversal(root: TreeNode | null): number[] {
const res: number[] = []
if (!root) return res
const preOrder = (node: TreeNode | null) => {
if (!node) return
res.push(node.val)
preOrder(node.left)
preOrder(node.right)
}
preOrder(root)
return res
}
复杂度分析:
-
时间复杂度:O(n),其中 n 是二叉树中的节点数。每个节点恰好被遍历一次。
-
空间复杂度:O(n),空间复杂度取决于递归的深度,而树最坏情况下为链状,因此空间复杂度为 O(n)。