news 2026/5/22 19:59:02

力扣二叉树的三种遍历

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣二叉树的三种遍历

这篇文章类比三种遍历的写法,每个遍历利用两种方法,分别是递归和迭代,帮助更好的学习二叉树的相关知识。

一、前序

两种方法:

1.递归

/** * 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) { const res = []; const preorder = (node) => { if(node === null) return; //先搜集根节点 res.push(node.val); //递归遍历左子树 preorder(node.left); //递归遍历右子树 preorder(node.right) } preorder(root); return res; };

2.迭代

/** * 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) { const res = []; // 存储遍历结果 const stk = []; // 模拟递归的栈 // 循环条件和中序/后序一致:当前节点非空 或 栈非空 while (root || stk.length) { while (root) { res.push(root.val); stk.push(root); root = root.left; } root = stk.pop(); root = root.right; } return res; };

二、中序

两种方法:

1.递归

/** * 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 inorderTraversal = function(root) { const res = []; const inorder = (node) => { if (node === null) return; // 先递归遍历左子树 inorder(node.left); // 收集当前节点值 res.push(node.val); // 再递归遍历右子树 inorder(node.right); }; inorder(root); return res; };

2.迭代

var inorderTraversal = function(root) { const res = []; const stk = []; while (root || stk.length) { while (root) { stk.push(root); root = root.left; } root = stk.pop(); res.push(root.val); root = root.right; } return res; };

三、后序

两种方法:

1.递归

/** * 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 postorderTraversal = function(root) { const res = []; const postorder = (node) => { if(node === null) return; //递归遍历左子树 postorder(node.left); //递归遍历右子树 postorder(node.right); //先搜集根节点 res.push(node.val); } postorder(root); return res; };

2.迭代

var postorderTraversal = function(root) { const res = []; const stk = []; let prev = null; while (root || stk.length) { while (root) { stk.push(root); root = root.left; } root = stk.pop(); if (!root.right || root.right === prev) { res.push(root.val); prev = root; root = null; } else { stk.push(root); root = root.right; } } return res; };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 20:37:08

Hadoop核心组件及其作用概述

Hadoop的核心组件可以概括为“两大基础”和一个“核心大脑”,它们共同构成了分布式数据处理的基石。核心一:HDFS (Hadoop Distributed File System) - 分布式存储 作用:负责存储。它是一个高可靠、高扩展性的分布式文件系统,能将超…

作者头像 李华
网站建设 2026/5/20 16:17:12

HDFS读写流程详解

HDFS(Hadoop分布式文件系统)的读写流程设计体现了其高容错、高吞吐量的特点。以下是核心流程解析:一、HDFS 写流程(客户端写入数据) 1. 客户端发起请求 客户端调用 FileSystem.create() 方法,通过 HDFS Cli…

作者头像 李华
网站建设 2026/5/22 16:35:26

年会中如何用评委爆灯设备提高现场气氛

在年会活动中,使用评委爆灯设备是一种有效的互动工具,能够通过即时反馈和视觉冲击显著提升现场气氛。以下结合相关实践,从操作方式和效果角度进行说明。爆灯设备的操作方式爆灯设备通常设计为手持或桌面式按钮装置,评委可通过按下…

作者头像 李华
网站建设 2026/5/22 18:23:22

运动耳机选哪款更适配?十款热门运动耳机实测分享

不管是晨跑还是周末户外骑行,耳机如果戴着不舒服、音质一般或者通话有杂音,就很影响运动心情。我自己是个运动狂人,用过多款耳机,也观察过很多运动小伙伴的需求,这篇文章就是把我多年使用运动耳机的感受整理出来&#…

作者头像 李华