📝Leetcode 二叉树的前序遍历

126 阅读1分钟

题目🌵

📝Leetcode 二叉树的前序遍历

✏️leetcode-cn.com/problems/bi…


给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

示例 1:

img

输入: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
}

image-20220125114224184

迭代

  • 先利用一个栈存储当前的节点
  • 一直遍历左子树,直到所有的左子树遍历完
  • 在弹出最后入栈的一个节点,然后遍历其右子树
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
}

image-20220127115017308