力扣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));
            }
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

终于明白了压力/性能测试中的并发、TPS、RT及吞吐量指标

欢迎关注&#xff0c;我们专注于为IT从业者、学生和爱好者提供实用的资源和帮助。 IT开DD那点小事 互联网技术的后花园&#xff0c;更多访问&#xff1a;www.besthub.tech 一、压力测试与性能测试等同吗&#xff1f; 压力测试&#xff1a;在系统正常使用的情况下&#xff0c;能…

使用modbustcp从PLC设备取得的ushort[2] 数据转换为int32大端模式

大端模式理论参考&#xff1a;https://blog.csdn.net/u012166958/article/details/87344366 大端模式&#xff1a;是指数据的高字节保存在内存的低地址中&#xff0c;而数据的低字节保存在内存的高地址中&#xff0c;这样的存储模式有点类似于把数据当成字符串顺序处理&#x…

(杂项笔记)VS Code好用的插件推进

vs code推荐插件 1、IntelliJ IDEA Keybindings2、Chinese (Simplified) Language Pack3、Code Spell Checker4、JavaScript (ES6) code snippets5、Mithril Emmet6、Path Intellisense7、Vue 3 Snippets8、VueHelper9、Auto Close Tag10、Auto Rename Tag11、Beautify12、Brac…

Activity的启动流程

小伙伴们面试的时候是不是被问过Activity的启动流程很多啊。那我们就来看看吧。个人感觉这类文章代码细节太多&#xff0c;反而容易迷失在源码调用之中&#xff0c;从而忽略了Activity启动过程的本质。所以本文就简单地定性地对Activity启动过程进行描述&#xff0c;不会贴上大…

GPT如何在一分钟内完成论文数据分析?

数据上传 PPMAN-AI 01 由于技术限制&#xff0c;目前InfinitePaper AI仅支持上传1份文件&#xff0c;且大小不超过10M。但是&#xff0c;在强大的代码解释器面前&#xff0c;这都是小问题。我们只需要将可能用到的文件打包成压缩文件上传即可&#xff0c;之后要求GPT直接解压…

动画渲染案例 | 《舒克贝塔·五角飞碟》欢乐开年,经典IP唤醒童年回忆

《舒克贝塔五角飞碟》是由杭州童话大王影视有限公司、天津猫眼微影文化传媒有限公司出品&#xff0c;郑亚旗执导和编剧的动画电影。蓝海创意云为该片提供了渲染服务。电影于2023年12月30日正式上映&#xff0c;上映不到一个月时间累计票房突破5000万大关&#xff0c;并被评为“…

css1基础选择器

大纲 一.标签选择器 比较简单&#xff0c;前面直接写目标标签 二.类选择器 应用 例子 三.多类名选择器&#xff08;调用时中间用空格隔开&#xff09; 四.id选择器 应用 五.通配符选择器 应用 六.总结

大模型日报-20240204

刚刚&#xff0c;字节版GPTs「扣子」上线了 https://mp.weixin.qq.com/s/efNjbeK8Zul39nLzQuawCg 在持续一年的大模型热潮之后&#xff0c;「智能体」成为了科技公司们新的押注方向之一。近日&#xff0c;字节跳动正式推出「Coze 扣子」AI Bot 开发平台。任何用户都可以快速、…

数据孤岛是什么?企业如何应对?

数据孤岛指的是数据在组织内部无法自由流通和共享的状态&#xff0c;这种现象不仅影响了业务的高效运作&#xff0c;也威胁着企业的创新和竞争力。本文将深入探讨数据孤岛问题&#xff0c;分析其产生的原因以及对企业的影响&#xff0c;最后提出有效的应对策略。 一、数据孤岛…

npm---设置淘宝镜像时报“certificate has expired“的错误

今天使用vue create my-app 创建项目时&#xff0c;竟然报错&#xff1a; Error: Command failed: npm info vue-cli-version-marker --json --registryhttps://registry.npm.taobao.org npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request t…

速度规划:用s形曲线规划速度------pencv c++绘图(2)

理论篇 应用篇 实现变速规划 #include <iostream> #include <opencv2/opencv.hpp> // 包含OpenCV头文件 #include <chrono> #include <thread>using namespace std;#define _CRT_SECURE_NO_WARNINGS #define a_max 1.0 #define J 0.2 #define v_m…

商家转账到零钱功能申请方法

商家转账到零钱是什么&#xff1f; 商家转账到零钱功能整合了企业付款到零钱和批量转账到零钱&#xff0c;支持批量对外转账&#xff0c;操作便捷。如果你的应用场景是单付款&#xff0c;体验感和企业付款到零钱基本没差别。 商家转账到零钱的使用场景有哪些&#xff1f; 商…

基于YOLOv8的工业油污缺陷检测,多种优化方法---自研新型轻量级的实时检测算法(四)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文主要内容:详细介绍了工业油污缺陷检测整个过程&#xff0c;从数据集到训练模型到结果可视化分析&#xff0c;以及如何优化提升检测性能。 &#x1f4a1;&#x1f4a1;&#x1f4a1;加入 自研新型轻量级的实时检测算法 mAP0.5由原始…

IDEA创建JavaWeb项目(保姆级别)

文章目录 1.1 原始的 Web 项目1.1.1 创建 Java web 项目1.1.2 完善项目结构1.1.3 依赖添加1.1.4 部署服务器(Tomcat)1.1.5 启动项目 1.2 使用 Maven 创建 Web 项目1.2.1 使用 maven 创建 web1.2.2 配置编译路径和jar包存放位置1.2.3 部署服务器&#xff08;Tomcat&#xff09;1…

2024.2.3

单向循环链表的头插 头删 尾插和尾删 //头结点插入 Linklist insere_element(Linklist head,datatype element) {Linklist screat();s->dataelement;if(NULLhead){heads;}else{Linklist phead;while(p->next!head){pp->next;}s->nexthead;heads;p->nexthead;}r…

【51单片机】开发板&开发软件(Keil5&STC-ISP)简介&下载安装破译传送门(1)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

Netflix Mac(奈飞mac客户端) v2.13.0激活版

Clicker for Netflix Mac版是一款适用于Mac的最佳独立Netflix播放器&#xff0c;具有直接从从Dock启动Netflix&#xff0c;从触摸栏控制Netflix&#xff0c;支持画中画等多种功能&#xff0c;让你拥有更好的观看体验。 软件特色 •直接从Dock启动Netflix •从触摸栏控制Netflix…

迅为STM32MP157开发板底板板载4G接口(选配)、千兆以太网、WIFI蓝牙模块

底板扩展接口丰富 底板板载4G接口(选配)、千兆以太网、WIFI蓝牙模块HDMI、CAN、RS485、LVDS接口、温湿度传感器(选配)光环境传感器、六轴传感器、2路USB OTG、3路串口CAMERA接口、ADC电位器、SPDIF、SDIO接口等。 支持多种显示屏 迅为在MP157开发板支持了多种屏幕&#xff0…

C# 使用 MailKit 发送邮件(附demo)

C# 使用 MailKit 发送邮件&#xff08;附demo&#xff09; 介绍安装包&#xff08;依赖&#xff09;案例简单代码属性介绍&#xff1a;MailboxAddress属性介绍&#xff1a;BodyBuilderSMTP 服务器端口SSL的案例&#xff1a;非SSL&#xff1a; 介绍一下SMTP 介绍 MailKit 是一…

2024年【高压电工】考试内容及高压电工模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 高压电工考试内容参考答案及高压电工考试试题解析是安全生产模拟考试一点通题库老师及高压电工操作证已考过的学员汇总&#xff0c;相对有效帮助高压电工模拟试题学员顺利通过考试。 1、【单选题】 FN5-10的型号含意是…