题目🌵
📝Leetcode 二叉树的前序遍历
✏️leetcode-cn.com/problems/bi…
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
示例 1:
输入:root = [1,null,2,3]
输出:[1,2,3]
解题思路💡
递归
- 根据二叉树前序遍历的规定 先遍历自己,再遍历左子树,再遍历右子树。
- 直接使用递归的形式,用一个数组
arr来存储遍历节点的值即可。
var preorderTraversal = function (root, arr = []) {
if (root) {
arr.push(root.val)
preorderTraversal(root.left, arr)
preorderTraversal(root.right, arr)
}
return arr
}
迭代
- 先利用一个栈存储当前的节点
- 一直遍历左子树,直到所有的左子树遍历完
- 在弹出最后入栈的一个节点,然后遍历其右子树
var preorderTraversal = function (root) {
// 迭代
// 开始遍历,使用一个栈存储
let result = []
let stack = []
let current = root
while (current || stack.length > 0) {
while (current) {
result.push(current.val)
stack.push(current) //后面通过current 找左右子树
current = current.left
}
current = stack.pop()
current = current.right
}
return result
}