美文网首页
二叉树的前序遍历

二叉树的前序遍历

作者: Shiki_思清 | 来源:发表于2022-04-14 00:47 被阅读0次

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

image.png

[1,7,8,null,2,3,4,2,3,4,null,5]
提示:

树中节点数目在范围 [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) {
    var newArrL = [],  newArrR = []
    if (!root || root.length == 0) {return []}
    if (root.left == null && root.right == null ) {
        return [root.val]
    } else {
        if (root.left != null)  {
            let temp = preorderTraversal(root.left)
            newArrL = newArrL.concat(temp) 
        }
        if (root.right != null)  {
            let temp = preorderTraversal(root.right)
            newArrR = newArrR.concat(temp) 
        } 
    }
    const newa = [root.val].concat(newArrL, newArrR)
    return newa
};

进阶:递归算法很简单,你可以通过迭代算法完成吗?

/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var preorderTraversal = function(root) {

    let queue = []
    let arr = []
    while(root) {
        queue.push(root)
        arr.push(root.val)
        root = root.left
    }
    
    
    let next = function() {
        root = queue.pop()
        if (root.right) {
            root = root.right
            while(root) {
                queue.push(root)
                arr.push(root.val)
                root = root.left
            }
        }
    }
    let hasNext = function() {
        return queue.length > 0
    }

    while(hasNext()){
        next()
    }
    return arr
}

相关文章

  • 二叉树的遍历

    二叉树的遍历 二叉树遍历 分为前序遍历、中序遍历和后序遍历。 前序遍历 (DLR) 先访问根节点,然后前序遍历左子...

  • 数据结构:树的实现和遍历(c++)

    (一)二叉树的遍历——递归实现 二叉树常见的遍历方式分为前序遍历、中序遍历和后序遍历。 1 前序遍历 前序遍历也叫...

  • leecode刷题(28)-- 二叉树的前序遍历

    leecode刷题(28)-- 二叉树的前序遍历 二叉树的前序遍历 给定一个二叉树,返回它的 前序 遍历。 示例:...

  • 二叉树递归非递归遍历算法整理

    一、二叉树前序遍历 1 前序递归遍历 2.前序非递归遍历 一、二叉树中序遍历 2.中序递归遍历 1.中序非递归遍历...

  • 二叉树遍历

    二叉树的遍历 1. 前序遍历 1.1 递归前序遍历 1.2 非递归前序遍历 2 中序遍历 2.1递归遍历 2.2非...

  • 二叉树递归与非递归 - 代码实现

    前序遍历,中序遍历,后序遍历,层次遍历,深度遍历 参考深度遍历 本质上就是 前序遍历 C++ 实现 二叉树前序、中...

  • 前端二叉树

    (一)构造二叉树 (二)中序遍历 (三)前序遍历 前序遍历可以复制二叉树,效率比重新构造二叉树高 (四)后序遍历 ...

  • 二叉树操作

    树节点 逐行顺序解析二叉树 前序遍历二叉树 中序遍历二叉树 后序遍历二叉树 删除指定数值的节点 前序遍历顺序存储的...

  • 遍历

    前序遍历 前序遍历(DLR),是二叉树遍历的一种,也叫做先根遍历、先序遍历、前序周游,可记做根左右。前序遍历首先访...

  • 二叉树 - 前序遍历、中序遍历、后序遍历

    前序遍历 前序遍历(DLR),是二叉树遍历的一种,也叫做先根遍历、先序遍历、前序周游,可记做根左右。前序遍历首先访...

网友评论

      本文标题:二叉树的前序遍历

      本文链接:https://www.haomeiwen.com/subject/ywwzsrtx.html