【Leetcode 144】js 二叉树的前序遍历

二叉树前序遍历

所谓前序遍历,即按照中左右的顺序进行遍历。

题目

给定一个二叉树,返回它的前序遍历。

示例:

输入: [1,null,2,3]  
   1
    \
     2
    /
   3 
输出: [1,2,3]

代码

递归算法
var preorderTraversal = function(root , array = []){
    if(root){
        array.push(root.val);
        preorderTraversal(root.left,array);
        preorderTraversal(root.right,array);
    }
    return array;
}

image-20210116174115082

非递归实现

初始化一个栈和结果数组,当栈不为空或目标节点不为空时,重复下面的步骤:

  1. 目标节点存入结果数组,左孩子入栈 → 直至左孩子为空
  2. 栈顶元素出栈,以栈顶元素为根节点
  3. 以右孩子为目标节点,执行1、 2、 3
var preorderTraversal = function(root){
    const result = [];
    const stack = [];
    let current = root;
    while(stack.length > 0 || current){
        while(current){
            result.push(current.val);
            stack.push(current);
            current = current.left;
        }
        current = stack.pop();
        current = current.right;
    }
    return result;
}

image-20210116174628464

更多资料

整理不易,若对您有帮助,请给个「关注+点赞」,您的支持是我更新的动力 👇

📖数据结构博客专栏:剑指 Offer 题解 + JS 代码
🐱Github笔记 :ruoruochen GitHub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值