聊聊二叉树的前序遍历算法

二叉树顾名思义,一个根节点只会有两个分叉对应,下图所示:

前序遍历先去拿它的左节点,拿完之后再去拿它左节点相邻的右节点,如数据结构是这样

第一中不考虑性能的方式的话,可以使用递归的方式去给他遍历

javascript 复制代码
 function deepTree(data) {
        let arrayData = []
        let fun = (node) => {
            if (node) {
                arrayData.push(node.val)
                //遍历一下左子树
                fun(node.left)
                //遍历一下右子树
                fun(node.right)
            }

            fun(data)
            return arrayData
        }
    }
    deepTree(tree)

依次拿到值的 val;

第二种方式使用栈的形式遍历

javascript 复制代码
  function preorderTraversal(root) {
        if (!root) return []

        let array = []
        let stack = [root]

        while (stack.length) {
            // 出栈
            let o = stack.pop()
            array.push(o.val)

            o.right && stack.push(o.right)
            o.left && stack.push(o.left)
            // console.log('oooo', o);
        }
        console.log(array);
    }
    preorderTraversal(tree)

考虑性能的算法使用 栈形式遍历;

时小记,终有成。

相关推荐
闲蛋小超人笑嘻嘻20 小时前
非父子通信: provide和inject
前端·javascript·vue.js
周亚鑫20 小时前
vue3 js代码混淆
开发语言·javascript·ecmascript
努力学算法的蒟蒻20 小时前
day49(12.30)——leetcode面试经典150
算法·leetcode·面试
天赐学c语言20 小时前
12.30 - 合并区间 && C++中class和C语言中struct的区别
c语言·c++·算法·leecode
止观止20 小时前
不止解构:深入掌握 ES6+ 对象与函数的高级语法糖
前端·javascript·es6
有一个好名字20 小时前
力扣-递增的三元子序列
算法·leetcode·职场和发展
C_心欲无痕20 小时前
react - useTransition标记低优先级更新
前端·react.js·前端框架
Boop_wu20 小时前
[Java 数据结构] 图(1)
数据结构·算法
捻tua馔...20 小时前
antd3的表单实现(HOC解决方案)
前端·javascript·react.js
支付宝体验科技20 小时前
支付宝 KJS Compose 动态化方案与架构设计
前端·客户端