leetcode144、145、94二叉树的前、中、后序遍历

本文主要讲解二叉树的前、中、后序遍历的要点与细节,按照步骤思考更方便理解 

c++代码如下,末尾

具体要点:
1. 首先我们要了解二叉树的前序,中序,后序的遍历顺序:
        前序:中 左 右

        中序:左 中 右

        后序:左 右 中

怎么记呢?其实“ 前 中 后 ”指的是根节点的位置


2. 本题主要就是按照遍历顺序把元素都存入数组中,返回这个数组


3. 遇到二叉树的问题,特别是前中后序遍历时,其实核心是要使用深度优先算法

但若遇到层序遍历时,需要使用广度优先算法


4. 本题主要是深度优先算法,即递归

        我们下面用前序遍历举例说明:

        既然涉及递归,那么我们在写递归函数时,要确定以下内容:

  • 确定递归参数与返回值
  • 确定终止条件
  • 确定单层递归逻辑

首先,我们考虑一下递归参数,二叉树递归中,一般都是要传递当前节点进去,这道题还需要我们传递数组进去(如果一时间考虑不清楚参数有什么,可以边写边加)

其次,考虑返回值,由于我们是直接操作的数组,所以我们不需要返回值,即void

然后,考虑终止条件,对于二叉树,一般的终止条件是遇到节点是null,就结束

最后,考虑单层递归逻辑,我们目的是把节点按照所要求的遍历顺序加入数组中,所以,遇到根节点就加入,左右节点就执行递归。(只要根据前中后序顺序排列一下逻辑即可)


总结

二叉树的遍历通常要利用递归操作来实现,对于递归我们要考虑好递归的参数、终止条件、逻辑,不要一直往深了想,企图把递归走一遍。只要把单层递归的细节搞清楚就好。

前序c++

class Solution {
public:vector<int> preorderTraversal(TreeNode* root) {//定义返回值vector<int> res;traversal(root,res);return res;}//确定递归函数的参数与返回值,没有返回值,直接操作的resvoid traversal(TreeNode* cur, vector<int>& res) {//确定终止条件,当遇到null时候就不执行递归了if (cur == nullptr) return;//前序遍历:中左右//先将根节点加入结果中res.push_back(cur->val);//左traversal(cur->left, res);//右traversal(cur->right, res);}
};

前序java

class Solution{public List<Integer> preorderTraversal(TreeNode root){List<Integer> res = new ArrayList<Integer>();Traversal(root, res);return res;}public void Traversal(TreeNode root, List<Integer> res){if(root == null) return;res.add(root.val);Traversal(root.left, res);Traversal(root.right, res);}
}

中序c++

class Solution {
public:vector<int> inorderTraversal(TreeNode* root) {vector<int> res;function(root, res);return res;}
private:void function(TreeNode* root, vector<int>& res){if(!root){return;}function(root->left,res);res.push_back(root->val);function(root->right,res);}
};

 中序java

class Solution{public List<Integer> preorderTraversal(TreeNode root){List<Integer> res = new ArrayList<Integer>();Traversal(root, res);return res;}public void Traversal(TreeNode root, List<Integer> res){if(root == null) return;Traversal(root.left, res);res.add(root.val);Traversal(root.right, res);}
}

后序c++

class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {vector<int> res;traversal(root,res);return res;}void traversal(TreeNode* root,vector<int>& res){if (root == nullptr) return;traversal(root->left, res);traversal(root->right, res);res.push_back(root->val);}
};

后序java

class Solution {public List<Integer> postorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();traverse(root, res);return res;}public void traverse(TreeNode root, List<Integer> res) {if(root == null) return;traverse(root.left, res);traverse(root.right, res);res.add(root.val);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/859711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8.项目结构——黑马程序员Java最新AI+若依框架项目

目录 前言一、后端1.ruoyi-admin2.ruoyi-common3.ruoyi-framework4. ruoyi-generator(可删除)5.ruoyi-quartz&#xff08;可删除&#xff09;5.ruoyi-system6. ruoyi-ui7.sql8.依赖关系9. 总结 二、前端三、SQL 前言 提示&#xff1a;本篇叙述若依前后端项目结构 一、后端 1…

无线领夹麦克风哪个品牌音质最好,揭秘无线麦克风哪个牌子最好!

​在这个数字化、信息化的时代&#xff0c;短视频和直播已经成为了人们生活中不可或缺的一部分。而无线麦克风&#xff0c;则是这些活动中不可或缺的重要工具。它们能够轻松捕捉声音&#xff0c;让内容更加生动、真实。然而&#xff0c;市场上的无线麦克风种类繁多&#xff0c;…

缓存策略概述

缓存策略 缓存策略是指在计算机系统中&#xff0c;为了提高数据访问效率而临时存储常用或频繁访问的数据的技术。这种技术通常在数据的读取过程中发挥作用&#xff0c;减少对原始数据源的请求次数&#xff0c;从而提升性能和响应速度。 在后端系统中&#xff0c;常见的缓存策…

Kubernetes面试整理-Kubelet, Kube-proxy和Kubernetes API 的功能和它们在集群中的作用

在 Kubernetes 集群中,kubelet、kube-proxy 和 Kubernetes API 是三个关键组件,它们在不同层面上支持集群的正常运行。以下是它们的功能及其在集群中的作用: Kubelet 功能 ● 节点管理:kubelet 运行在每个 Worker 节点上,负责节点上的所有 Pod 和容器的管理。 ● Pod 生命…

51-60 CVPR 2024 最佳论文 | Generative Image Dynamics

在2023年11月&#xff0c;谷歌研究院发布了一项令人瞩目的研究成果——Generative Image Dynamics&#xff08;生成图像动力学&#xff09;。这项技术的核心是将静态的图片转化为动态的、无缝循环的视频&#xff0c;而且更令人兴奋的是&#xff0c;这些生成的视频还具有交互性。…

大模型日报2024-06-24

大模型日报 2024-06-24 大模型资讯 大模型产品 AI快速生成专业播客 摘要: MakePodcast.io使用AI语音&#xff0c;只需提供脚本并选择声音&#xff0c;即可在几分钟内生成专业质量的播客。 Sherloq&#xff1a;SQL用户的AI协作仓库 摘要: Sherloq为SQL查询提供一站式管理&#x…

AI赋能天气:微软研究院发布首个大规模大气基础模型Aurora

编者按&#xff1a;气候变化日益加剧&#xff0c;高温、洪水、干旱&#xff0c;频率和强度不断增加的全球极端天气给整个人类社会都带来了难以估计的影响。这给现有的天气预测模型提出了更高的要求——这些模型要更准确地预测极端天气变化&#xff0c;为政府、企业和公众提供更…

高考后的新起点:学校与专业的选择之困

十年前&#xff0c;我踏入了高考的考场。那是一场人生的大考&#xff0c;不仅仅是对知识的检验&#xff0c;更是对未来方向的一次摸索。当最后一门科目的考试铃声响起&#xff0c;我知道&#xff0c;自己即将面临一个新的选择——专业与学校&#xff0c;究竟该如何取舍&#xf…

【转】5种常见的网络钓鱼攻击以及防护手段

2022 年 Verizon 数据泄露调查报告指出&#xff0c;去年 75% 的社会工程攻击涉及网络钓鱼&#xff0c;仅去年一年就有超过 33 万个账户被网络钓鱼&#xff0c;网络钓鱼占整体社会工程攻击的 41%。 不能将所有责任归咎于员工&#xff0c;因为薄弱的安全意识建设及宣教是大部分漏…

XSS跨站攻击漏洞

XSS跨站攻击漏洞 一 概述 1 XSS概述 xss全称为&#xff1a;Cross Site Scripting&#xff0c;指跨站攻击脚本&#xff0c;XSS漏洞发生在前端&#xff0c;攻击的是浏览器的解析引擎&#xff0c;XSS就是让攻击者的JavaScript代码在受害者的浏览器上执行。 XSS攻击者的目的就是…

信息安全系列课程之网络空间测绘与态势感知技术揭秘(二)

今天&#xff0c;我们来讲一下网络安全&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 目前&#xff0c;在信息安全攻防领域&#xff0c;主要分为了两个技术发展方向&#xff0c;分别为渗透测试&#xff08;红队技术&#xff09; 和 安全运维&a…

2024还选计算机

一、计算机相关专业是否仍是“万金油”选择&#xff1f; 从当前市场需求和就业趋势来看&#xff0c;计算机相关专业仍然具有较大的吸引力。这些专业所涵盖的技能和知识在现代社会中具有广泛的应用场景&#xff0c;如软件开发、数据分析、网络安全等。因此&#xff0c;选择计算机…

Windows 中 Chrome / Edge / Firefox 浏览器书签文件默认存储路径

1. Chrome 浏览器 按组合键 Win R&#xff0c;打开运行对话框&#xff0c;输入 %USERPROFILE%\AppData\Local\Google\Chrome\User Data\Default或在Chrome 浏览器地址栏输入 chrome://version查看【个人资料路径】 2. Edge 浏览器 按组合键 Win R&#xff0c;打开运行对…

【华为OD机试】 服务中心选址(C++ Java JavaScript Python)

题目 题目描述 一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置,并希望能够以此为依据为新的服务中心选址:使服务中心到所有区域的距离的总和最小。 给你一个数组positions,其中positions[i] = [left, right] 表示第 i 个区域在街道…

GD32F4xx 移植agile_modbus软件包与电能表通信

目录 1. agile_modbus1.1 简介1.2 下载2. agile_modbus使用2.1 源码目录2.2 移植3. 通信调试3.1 代码3.3 通信测试1. agile_modbus 1.1 简介 agile_modbus是一个轻量级的Modbus协议栈,主要特点: 支持RTU和TCP协议,采用纯C语言开发,不涉及任何硬件接口,可直接在任何形式的…

Java流程控制语句

Java流程控制语句有三种&#xff1a; 顺序结构、分支结构和循环结构。 顺序结构&#xff1a; 顺序结构语句是Java程序默认的执行流程&#xff0c;按照代码的先后顺序&#xff0c;从上到下依次执行。 原文链接&#xff1a; Java流程控制控制语句 - 红客网络编程与渗透技术 示例…

[笔记] ONNX Export笔记[进行中...]

1.ONNX模型的优势&#xff1a; ONNX可以提供方便的平台兼容性和方便的移植实现&#xff0c;Opset&#xff0c;可以接收其他的推理模型的的移植&#xff0c;比如从.pt>.onnx。而.onnx利用Runtime规范&#xff0c;以及可扩展接口&#xff0c;把.onnx模型向下兼容到各个硬件平…

查看es p12证书文件过期方法

查看证书过期时间: openssl pkcs12 -in elastic-certificates.p12 -nokeys -out elastic-certificates.crt (需要输入证书生成时配置密码) openssl x509 -enddate -noout -in elastic-certificates.crt

乐鑫云方案研讨会回顾|ESP RainMaker® 引领创业潮,赋能科创企业

近日&#xff0c;乐鑫信息科技 (688018.SH) ESP RainMaker 云生态方案线下研讨会和技术沙龙在深圳成功举办&#xff0c;吸引了众多来自照明电工、新能源、安防、宠物等垂类领域的客户与合作伙伴。活动现场&#xff0c;与会嘉宾围绕产品研发、测试认证、品牌构建、跨境电商等多维…

【面试题】什么是等保2.0?

等保2.0&#xff0c;全称网络安全等级保护2.0制度&#xff0c;是我国网络安全领域的基本国策和基本制度&#xff0c;旨在加强网络系统的安全保护&#xff0c;确保关键信息不被泄露、篡改、破坏或丧失。以下是关于等保2.0的详细介绍&#xff1a; 实施时间与背景&#xff1a; 等…