L51--- 144. 二叉树的前序遍历(深搜)---Java版

1.题目描述

在这里插入图片描述

2.思路

二叉树的前序遍历遵循 根左右
(1)方法 preorderTraversal
输入参数: TreeNode root

root是二叉树的根节点。
返回值: List

返回一个包含二叉树节点值的列表,这些值按照前序遍历的顺序排列。
功能:

这个方法是前序遍历的主方法,它创建一个空的List来存储遍历结果。
然后,它调用一个辅助方法preorderHelper,将根节点root和结果列表result传递给它。
最后,返回结果列表result。
(2)输入参数:
TreeNode node: 当前节点。
List result: 用于存储遍历结果的列表。
功能:

这个方法是一个递归方法,用于执行前序遍历。
检查节点是否为空:
如果当前节点node为空,直接返回,不做任何处理。
访问根节点:
如果当前节点不为空,将当前节点的值node.val添加到结果列表result中。
递归遍历左子树:
调用自身preorderHelper,传入当前节点的左子节点和结果列表result,继续遍历左子树。
递归遍历右子树:
调用自身preorderHelper,传入当前节点的右子节点和结果列表result,继续遍历右子树。
工作原理
从根节点开始,将根节点的值添加到结果列表中。
递归地遍历左子树,在每个节点上重复步骤1。
当左子树遍历完成后,递归地遍历右子树,同样在每个节点上重复步骤1。

3.代码实现

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<Integer> preorderTraversal(TreeNode root) {//TreeNode node 当前节点List<Integer> result=new ArrayList<>();//用于存储遍历结果的列表。preoderHelper(root,result);/*功能:这个方法是前序遍历的主方法,它创建一个空的List<Integer>来存储遍历结果。
然后,它调用一个辅助方法preorderHelper,将根节点root和结果列表result传递给它。
最后,返回结果列表result。*/return result;}private void preoderHelper(TreeNode node,List<Integer> result){if(node==null){return;}result.add(node.val);//访问根节点preoderHelper(node.left,result);//递归遍历左子树preoderHelper(node.right,result);//右子树}
}
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
/*class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result=new ArrayList<>();preoderHelper(root,result);return result;}private void preoderHelper(TreeNode node,List<Integer> result){if(node==null){return;}result.add(node.val);//访问根节点preoderHelper(node.left,result);//递归遍历左子树preoderHelper(node.right,result);//右子树}
}*/class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result=new ArrayList<>();if(root==null){return result;}Stack<TreeNode> stack=new Stack<>();stack.push(root);while(!stack.isEmpty()){TreeNode current=stack.pop();result.add(current.val);//访问根节点//入栈先右后左,出栈先左后右if(current.right!=null){stack.push(current.right);}if(current.left!=null){stack.push(current.left);}}return result;}
}

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

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

相关文章

微信小程序04: 获取openId和unionId

全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.1 上文小总结1.1.2 上文传送门 2. 获取openId和unionId操作2.1 准备工作2.1.1 请先复制00篇的统一封装代码2.1.2 微信登录请求dto 2.2 具体代码使用与注释如下2.2.1 业务代码2.2.2 代码解释(一)[无需复制]2.2.3 获取的map使用方…

值传递和址传递

值传递 上面的代码是想要交换x&#xff0c;y的值&#xff0c;把x&#xff0c;y传递给swap函数之后&#xff0c;执行下面的操作&#xff1a; 在swap中a和b交换了&#xff0c;但是和x&#xff0c;y没有关系&#xff0c;所以x&#xff0c;y在main中不会变。 址传递 下面再看把x…

解析Java中1000个常用类:Character.Subse类,你学会了吗?

在线工具站 推荐一个程序员在线工具站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。程序员资料站 推荐一个程序员编程资料站:程序员的成长之路(http://cxyroad.com),收录了一些列的技术教程…

微信小程序与H5的区别

微信小程序与H5的区别主要体现在以下几个方面&#xff1a; 运行环境&#xff1a; H5的运行环境是任何浏览器&#xff0c;用户可以通过浏览器访问H5页面。微信小程序的运行环境并非完整的浏览器&#xff0c;而是微信团队基于浏览器内核完全重构的一个内置解析器&#xff0c;针对…

2024FIC决赛

容器密码&#xff1a;2024Fic~Competition~Finals杭州&Powered~By~HL! 案件背景: 2023年3月15日凌晨,受害人短视频平台上看到一段近期火爆的交通事故视频&#xff0c;留言后有人通过私信联系&#xff0c;称有一个赚大钱的机会&#xff0c;该人自称李某&#xff0c;提议让…

软件工程期末复习题

目录 选择 判断 选择 下列说法中正确的是 ( B )。 A、20 世纪50 年代提出了软件工程的概念摇 B、20 世纪60 年代提出了软件工程的概念 C、20 世纪70 年代出现了客户端/ 服务器技术 D、20 世纪80 年代软件工程学科达到成熟 软件危机的主要原因是 ( D )。 A、软件工具落后…

Java基础 - 枚举

枚举是一个被命名的整型常数的集合&#xff0c;用于声明一组带标识符的常数。 声明枚举 声明枚举时必须使用 enum 关键字&#xff0c;然后定义枚举的名称、可访问性、基础类型和成员等。 任意两个枚举成员不能具有相同的名称&#xff0c;且它的常数值必须在该枚举的基础类型的…

系统架构师面试题

系统架构师面试题通常会涉及多个方面,旨在考察应聘者的专业知识、实践经验以及解决问题的能力。以下是一些常见的系统架构师面试题: 请简要介绍一下您之前参与的项目: 在回答这个问题时,应着重介绍与架构设计相关的项目,包括项目的规模、涉及的技术栈、解决的问题以及您在…

基于STM32移植U8g2图形库——OLED显示(HAL库)

文章目录 一、U8g2简介1、特点2、U8g2的使用步骤 二、I2C相关介绍1、I2C的基本原理2、I2C的时序协议 三、OLED屏的工作原理四、汉字点阵显示原理五、建立STM32CubeMX工程六、U8g2移植1、U8g2源码2、移植过程 七、代码编写1、参考博主实现的U82G的demo例程&#xff08;1&#xf…

【Linux内核】伙伴系统算法和slab分配器(1)

【Linux内核】伙伴系统算法和slab分配器&#xff08;1&#xff09; 目录 【Linux内核】伙伴系统算法和slab分配器&#xff08;1&#xff09;伙伴系统&#xff08;buddy&#xff09;算法伙伴系统算法基本原理内存申请内存回收 接口函数源码分析内存分配接口物理内存释放接口规范…

基于Wireshark实现对FTP的抓包分析

基于Wireshark实现对FTP的抓包分析 前言一、虚拟机Win10环境配置二、FileZilla客户端的安装配置下载FileZilla客户端安装FileZilla 三、FileZilla Server安装下载FileZilla Server安装 四、实现对FTP的抓包前置工作实现抓包完成抓包 前言 推荐一个网站给想要了解或者学习人工智…

增量数据库同步软件PanguSync侵入式全面清理脚本

Sqlserver -- 变量声明 DECLARE tableName NVARCHAR(256) DECLARE indexName NVARCHAR(128) DECLARE triggerName NVARCHAR(256) DECLARE sql NVARCHAR(MAX) DECLARE constraintsname NVARCHAR(256) -- 声明游标来遍历所有用户表 DECLARE curTables CURSOR FOR …

JS中访问节点和创建节点的方法都有什么?

在JavaScript中&#xff0c;访问节点和创建节点的方法非常丰富。以下是对这两种操作的详细方法归纳&#xff1a; 访问节点的方法 通过ID访问&#xff1a; getElementById(id)&#xff1a;通过元素的ID属性获取对应的DOM节点。通过类名访问&#xff1a; getElementsByClassNam…

Setapp:只需一次订阅,即可获得 240 款+ Mac 软件

为一项任务寻找合适的应用程序是一项相当艰巨的任务。过去&#xff0c;最好的办法要么是花费宝贵的时间搜索可靠的评论&#xff0c;要么就是相信无论安装什么软件都能完成任务。 如果你是 Mac 用户&#xff0c;那么 Setapp 将让这一问题成为过去。无需在需要时下载单个程序&am…

【C++ COM组件 运用ATL工程创建和调用COM组件】

ATL (Active Template Library) 是一个用于简化 COM (Component Object Model) 组件开发的库。使用 ATL&#xff0c;你可以创建 COM 对象&#xff0c;这些对象可以跨进程和跨机器进行通信。下面是一个简单的步骤&#xff0c;说明如何使用 ATL 创建一个简单的 COM 组件&#xff…

vue之一键部署的shell脚本和它的点.bat文件、海螺AI、ChatGPT

MENU 前言vite.config.ts的配置deploy文件夹的其他内容remote.shpwd.txtdeploy.bat 前言 1、在src同级新建deploy.bat文件&#xff1b; 2、在src同级新建deploy文件夹&#xff0c;文件夹中新建pwd.txt和remote.sh文件&#xff1b; 3、配置好后&#xff0c;直接双击deploy.bat文…

鸿蒙轻内核M核源码分析系列二一 02 文件系统LittleFS

1、LFS文件系统结构体介绍 会分2部分来介绍结构体部分&#xff0c;先介绍LittleFS文件系统的结构体&#xff0c;然后介绍LiteOS-M内核中提供的和LittleFS相关的一些结构体。 1.1 LittleFS的枚举结构体 在openharmony/third_party/littlefs/lfs.h头文件中定义LittleFS的枚举、…

JavaScript-for循环

学习目标&#xff1a; 掌握for循环 学习内容&#xff1a; for循环语法退出循环for循环和while循环有什么区别for循环嵌套 for循环语法&#xff1a; 作用&#xff1a;重复执行代码。好处&#xff1a;把声明起始值、循环条件、变化值写到一起&#xff0c;让人一目了然&#xff…

在线时钟python案例

试了一下用通义来编写一些代码&#xff0c;以下是一个在线时钟的样例&#xff0c;只要能运行python就可以使用。 以下是运行后的结果。 代码&#xff08;复制可用&#xff09; import tkinter as tk from time import strftimedef update_time():current_time strftime(&quo…

Postman使用教程(Postman详细图文教程)

本文讲解的是postman工具安装、postman安装教程、postman工具下载、postman使用教程。Postman使得得开发人员和测试人员能够更高效地与Web服务进行交互和调试。 Postman不仅支持常见的HTTP方法&#xff0c;如GET、POST、PUT、DELETE等&#xff0c;还提供了丰富的请求编辑功能&…