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

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

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

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

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)

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

时小记,终有成。

相关推荐
大包子9 小时前
structuredClone vs lodash.cloneDeep:核心差异与选型指南
javascript·vue.js
海码事务所9 小时前
Google Play 新个人开发者账号上架指南:12 人连续 14 天封闭测试怎么做?
前端
田威AI9 小时前
图片内文字翻译的规格:输入输出、保真、自动化、时间与费用
前端·计算机视觉
A加ITIL教练长河achotsao9 小时前
ITIL Master 战略领导者课后系列分享:AI编程正在重新划分研发与运维的边界
算法
hahaha60169 小时前
FPGA+ARM实现AWB的全流程
人工智能·嵌入式硬件·算法·计算机视觉·fpga开发
李洱9 小时前
LangChain 和 LangGraph 的区别:核心原理与使用场景
算法
夏幻灵9 小时前
每日一题:LeetCode 206:反转链表——三指针与原地反转详解
算法·leetcode·链表
不可能片场9 小时前
命令行中文变问号 我用环境变量救了场
前端·electron
lerhxx9 小时前
AI 应用中的上下文管理 —— 从"上下文窗口"到"分层压缩"的工程实践
前端·javascript
骑着蜗牛撵大象3279 小时前
多 Agent 分治协作:MapReduce 模式下的并行扇出与结果归并
前端