力扣144 二叉树的前序遍历 Java版本

文章目录

  • 题目描述
  • 递归方法
    • 代码
  • 非递归方法
    • 代码


题目描述

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

示例 1:
在这里插入图片描述

输入:root = [1,null,2,3]
输出:[1,2,3]
示例 2:

输入:root = []
输出:[]
示例 3:

输入:root = [1]
输出:[1]
示例 4:
在这里插入图片描述

输入:root = [1,2]
输出:[1,2]
示例 5:
在这里插入图片描述

输入:root = [1,null,2]
输出:[1,2]

提示:

树中节点数目在范围 [0, 100] 内
-100 <= Node.val <= 100

进阶:递归算法很简单,你可以通过迭代算法完成吗?

递归方法

递归的第一步就是找到递归出口,这里是root为null的时候结束递归,因为如果root为null则既没有val也没有子树,所以就不需要继续往下递归了。
接下来就是按照需要遍历的顺序来执行此方法,大部分时候不要深入考虑递归的具体实现,因为越是考虑越是混乱,直接按照顺序交给计算机去执行就可以了。

代码

class Solution {//使用递归的方法来进行前序遍历public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<>();preorder(root,result);return  result;}public void preorder(TreeNode root,List<Integer> result){//递归出口if (root==null) {return;}//遍历中间节点result.add(root.val);//遍历左孩子preorder(root.left,result);//遍历右孩子preorder(root.right,result);}
}

非递归方法

思路在代码中详细注释了

代码

class Solution {//使用非递归的方法来完成public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<>();preorder(root,result);return  result;}public void preorder(TreeNode root,List<Integer> result){//如果root为空则直接返回if (root==null){return;}//前序遍历需要把当前节点遍历完,再把左子树都遍历完之后,再开始遍历右子树//每个节点都是这样的顺序,所以需要保存记录当前节点的右孩子,因为需要左子树都遍历完才轮到右孩子//考虑使用栈的方法,因为栈可以先把一部分暂时不用的信息保存到栈中Stack<TreeNode> stack = new Stack<>();//先把root入栈stack.push(root);//循环遍历直到所有节点都完成遍历while (!stack.isEmpty()){TreeNode treeNode = stack.pop();result.add(treeNode.val);//将右孩子入栈,再将左孩子入栈,这样出栈之后才是左孩子优先if(treeNode.right!=null){//如果是空的就不需要入栈了stack.push(treeNode.right);}//将左孩子入栈if(treeNode.left!=null){stack.push((treeNode.left));}}}
}

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

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

相关文章

ElementUI Data:Table 表格

ElementUI安装与使用指南 Table 表格 点击下载learnelementuispringboot项目源码 效果图 el-table.vue&#xff08;Table表格&#xff09;页面效果图 项目里el-table.vue代码 <script> export default {name: el_table,data() {return {tableData: …

蓝桥杯省赛无忧 数位DP 课件78 数位DP

01 算法概述 02 问题引入 03 算法分析 04 例题

《QDebug 2024年1月》

一、Qt Widgets 问题交流 1. 二、Qt Quick 问题交流 1.Repeator 的 delegate 在 remove 移除时的注意事项 Qt Bug Tracker&#xff1a;https://bugreports.qt.io/browse/QTBUG-47500 Repeator 在调用 remove 函数之后&#xff0c;对应的 Item 会立即释放&#xff0c;后续就…

如何基于文档的内容实现 AI 对话功能,以 Documate 为例

前言 在 ChatGPT 出现之时&#xff0c;社区内也出现过 把 React 官方文档投喂给它 &#xff0c;然后对它进行提问的实践。但是&#xff0c;由于每次 ChatGPT 对话能接受的文本内容对应的 Token 是有上限的&#xff0c;所以这种使用方式存在一定的手动操作成本和不能复用的问题…

Linux eject命令教程:如何安全地弹出你的设备(附实例详解和注意事项)

Linux eject命令介绍 eject命令在Linux中用于弹出可移动设备。这通常是光盘&#xff0c;但也可以是软盘&#xff0c;磁带&#xff0c;或JAZ或ZIP磁盘。此命令还可以控制一些多碟CD-ROM切换器&#xff0c;一些设备支持的自动弹出功能&#xff0c;以及关闭一些CD-ROM驱动器的光盘…

使用Ettus USRP X440对雷达和EW系统进行原型验证

概览 无论是保障己方平台的生存能力&#xff0c;还是扰乱敌方频谱使用&#xff0c;以电磁(EM)频谱为主导都是任务成功的主要因素。电磁频谱操作(Electromagnetic Spectrum Operation, EMSO)需要使用战术系统来监测敌方的频谱活动、定位其发射器并帮助己方制定行动计划。软件无…

新 Ubuntu 14.04 服务器的基本配置

简介 在为新服务器设置最低配置之后&#xff0c;大多数情况下都建议进行一些额外的步骤。在本指南中&#xff0c;我们将继续配置我们的服务器&#xff0c;处理一些推荐但可选的程序。 先决条件和目标 在开始本指南之前&#xff0c;您应该先运行 Ubuntu 14.04 初始服务器设置…

离散数学——特殊关系(笔记及思维导图)

离散数学——特殊关系&#xff08;笔记及思维导图&#xff09; 笔记来自【电子科大】离散数学 王丽杰

DIY制作硬模空心耳机壳使用的是什么原材料?

制作硬模空心耳机壳的原材料可以根据不同的制作要求和材料特性进行选择。以下是一些常见的原材料&#xff1a; 塑料&#xff1a;塑料是一种常用的耳机壳制作材料&#xff0c;具有轻便、耐用、防水等特点。常见的塑料材料包括ABS、PC、PA等&#xff0c;可以根据具体要求进行选择…

vue+springboot项目开发,使用MySQL示例数据库sakila

vuespring boot项目开发&#xff0c;使用MySQL示例数据库sakila 从零开始开发一个简单的前后端分离项目&#xff0c;实现对MySQL示例数据库sakila中film表的数据展示。 环境配置 使用IDEA进行后端开发&#xff08;Spring Boot&#xff09; 安装IDEA&#xff1a;参考JDK的安…

20240131在ubuntu20.04.6下使用whisper不同模式的比对

20240131在ubuntu20.04.6下使用whisper不同模式的比对 2024/1/31 16:07 首先你要有一张NVIDIA的显卡&#xff0c;比如我用的PDD拼多多的二手GTX1080显卡。【并且极其可能是矿卡&#xff01;】 2、请正确安装好NVIDIA最新的驱动程序和CUDA。可选安装&#xff01; 3、配置whisper…

开发实践9_OnlinePlatform笔记

学习朔宁夫开发工程师课程笔记。 0架构&#xff1a; 01. MyDoc\PycharmProjects\ProjOnline&#xff0c;注册一个index app备主页用。 02. python manage.py startapp users, python manage.py startapp course. install apps. 03. total url urlpatterns [# http://127.…

Springboot项目启动后浏览器不能直接访问接口,而postman可以访问?

在云服务器上部署springboot后端时&#xff0c;项目启动后浏览器不能直接访问接口,而postman可以访问。这是当时困扰了我大半天的小问题&#xff0c;在我打开防火墙和阿里云安全组之后还是没解决。然后在网上搜了很多很多资料&#xff0c;以为是浏览器访问权限或者是https什么证…

[力扣 Hot100]Day23 反转链表

题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 出处 思路 经典考研题&#xff0c;用头插法解决。 代码 class Solution { public:ListNode* reverseList(ListNode* head) {if(!head || !head->next) return head;List…

蓝桥 第三周 分治 排序

3.1 分治法介绍及关键点解析_哔哩哔哩_bilibili 分治&#xff1a;分解 解决 合并 快速排序 单向扫描分区法 public static void main(String[] args) {// TODO Auto-generated method stubint[] arr {1,6,3,6,2,8,6,1,0,7};quickSort1(arr,0,arr.length-1);for(int i:arr) {…

shell脚本初始化mysql密码

如果你想在shell脚本中初始化MySQL的密码&#xff0c;你可以使用以下的方法。首先&#xff0c;你需要知道MySQL的root用户密码。在初始化过程中&#xff0c;你可以设置一个新的密码。 以下是一个简单的例子&#xff0c;说明如何在shell脚本中初始化MySQL的root密码&#xff1a…

Open3d计算点云法向量,可视化(代码)

Open3d使用estimate_normals函数来计算法向量。其参数设置Open3d提供了3中参数搜索的方法&#xff08;所有计算的法向量模长为1&#xff09;&#xff1a; open3d.geometry.KDTreeSearchParamKNN(knn20) # 计算近邻的20个点 open3d.geometry.KDTreeSearc…

Linux下qemu的安装并搭建虚拟arm环境(带helloworld测试)【超详细】

qemu的安装并搭建虚拟arm环境 1、准备工作1.1 安装交叉汇编工具1.2 编译内核kernel1.3 u-boot编译1.4 制作根文件系统-busybox 2、启动qemu&#xff08;arm&#xff09;3、helloworld测试 1、准备工作 1.1 安装交叉汇编工具 交叉编译器的作用就不需要详细解释了&#xff0c;因…

MySQL原理(四)索引(3)索引失效与索引区分度

一、索引失效&#xff1a; 首先未使用索引列作为查询条件索引是肯定会生效的&#xff0c;还有其他的情况&#xff0c;索引列做为了查询条件也失效了&#xff1a; ALTER TABLE staffs ADD INDEX idx_staffs_nameAgePos(NAME, age, pos); 1、select 语句、order by语句&#xf…

来了来了,5000个红包封面免费领

今年公众号很慷慨&#xff0c;给长期运营的作者免费发放了6w个红包封面&#xff0c;感谢公众号平台。 往年还是自己花钱找别人设计&#xff0c;平台审核通过后才能正常发放给大家&#xff0c;自从AI绘画工具问世后&#xff0c;自己也能设计了。 下面的两个封面都是我用AI工具St…