当前位置: 首页 > news >正文

二叉树的前、中和后序遍历的递归与迭代实现

1. 前序遍历

1.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) {let result = []traversal(root, result)return result
};function traversal(root, res) {if(root == null) returnres.push(root.val)traversal(root.left, res)  // 左子树traversal(root.right, res)  // 右子树
}

1.2 迭代

var preorderTraversal = function (root) {if (root == null) return []let result = []let stash = [root]while (stash.length) {const curNode = stash.pop()// 第一步的时候 先访问根节点result.push(curNode.val)// 现加入栈的是右子树然后再是左子树 这样从栈中先弹出的就是左子树 后弹出的才子右子树if (curNode.right) stash.push(curNode.right)if (curNode.left) stash.push(curNode.left)}return result
};

2. 中序遍历

2.1 递归

var inorderTraversal = function(root) {let result = []let traversal = (node, res) => {if(node == null) return// 左traversal(node.left, res)// 中res.push(node.val)// 右traversal(node.right, res)}traversal(root, result)return result
};

2.2 迭代

var inorderTraversal = function (root) {let result = []let stash = []let node = rootwhile (node || stash.length) {// 遍历左子树while (node) {stash.push(node)node = node.left}// 中node = stash.pop()result.push(node.val)// 右node = node.right}return result
};

3. 后序遍历

3.1 递归

var postorderTraversal = function(root) {let result = []let traversal = (node, res) => {if(node == null) return// 左traversal(node.left, res)// 右traversal(node.right, res)// 中res.push(node.val)}traversal(root, result)return result
};

3.2 迭代

var postorderTraversal = function (root) {if(!root) return []let result = []let stash = [root]while (stash.length) {let curNode = stash.pop()result.unshift(curNode.val)   // 核心unshiftif (curNode.left) stash.push(curNode.left)if (curNode.right) stash.push(curNode.right)}return result
};
http://www.lryc.cn/news/254154.html

相关文章:

  • 人体姿态估计算法
  • docker部署jupyter
  • 音视频的功耗优化
  • Python实现FA萤火虫优化算法优化XGBoost回归模型(XGBRegressor算法)项目实战
  • SCAUoj综合性实验
  • 智加科技获全国首张重卡无人驾驶开放道路测试牌照
  • LLM大语言模型(一):ChatGLM3-6B本地部署
  • chatgpt prompt提示词
  • 【PyTorch】数据集
  • oops-framework框架 之 本地存储(五)
  • 编程常见的问题
  • 针对Arrays.asList的坑,可以有哪些处理措施
  • SE考研真题总结(一)
  • Xshell远程登录AWS EC2 Linux实例
  • Elasticsearch:对时间序列数据流进行降采样(downsampling)
  • python自动化测试框架:unittest测试用例编写及执行
  • ctfhub技能树_web_web前置技能_HTTP
  • mysql8报sql_mode=only_full_group_by(存储过程一直报)
  • Vue2中v-html引发的安全问题
  • java内部类详解
  • Python 潮流周刊#29:Rust 会比 Python 慢?!
  • 吴恩达《机器学习》11-1-11-2:首先要做什么、误差分析
  • Pandas在Excel同一个sheet里插入多个Dataframe和行
  • 查看mysql 或SQL server 的连接数,mysql超时、最大连接数配置
  • C++学习之路(七)C++ 实现简单的Qt界面(消息弹框、按钮点击事件监听)- 示例代码拆分讲解
  • python实现一个计算器
  • C++ 共享内存ShellCode跨进程传输
  • 如何快速移植(从STM32F103到STM32F407)
  • python高级练习题库实验1(B)部分
  • Qt Rsa 加解密方法使用(pkcs1, pkcs8, 以及文件存储和内存存储密钥)