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.mfbz.cn/a/721851.html

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

相关文章

剖析 Kafka 消息丢失的原因

文章目录 前言一、生产者导致的消息丢失的场景场景1&#xff1a;消息太大解决方案 &#xff1a;1、减少生产者发送消息体体积2、调整参数max.request.size 场景2&#xff1a;异步发送机制解决方案 &#xff1a;1、使用带回调函数的发送方法 场景3&#xff1a;网络问题和配置不当…

React 中的 ErrorBoundary

在 React 中&#xff0c;如果不做任何控制&#xff0c;当组件出现异常时&#xff0c;React 渲染就会停止&#xff0c;页面出现白屏&#xff0c;这种体验很不好。例如当用户输入某些非法数据&#xff0c;而前端都没有进行校验&#xff0c;页面出现白屏。这种情况下&#xff0c;最…

如何训练AI大模型?熬夜爆肝整理大全

随着人工智能技术的快速发展&#xff0c;大型预训练模型在自然语言处理、计算机视觉、语音识别等领域取得了显著成果。这些模型通过在海量数据上进行预训练&#xff0c;能够捕捉到丰富的特征信息&#xff0c;为各种下游任务提供强大的支持。然而&#xff0c;训练AI大模型面临着…

20240616日志:大模型压缩方法DMS

Location: Beijing 1 大模型剪枝 Fig. 1.1大模型压缩-剪枝 剪枝的理论来源基于彩票假设&#xff08;Lottery Ticket Hypothesis&#xff09;&#xff0c;指在神经网络中存在一种稀疏连接模式&#xff0c;即仅利用网络的一小部分连接&#xff08;彩票&#xff09;就足以实现与整…

npm语义化版本和版本运算符

版本号组成 一个完整的版本号&#xff0c;由三部分组成&#xff1a;主版本号&#xff08;major&#xff09;、次版本号(minor)、修订版本号(patch)&#xff0c;简称X.Y.Z&#xff0c;具体含义&#xff1a; 主版本号&#xff08;major&#xff09;&#xff1a;项目&#xff08…

环境搭建---单机k8s

配置基础环境 关闭防火墙 [rootVM-20-14-centos ~]# systemctl stop firewalld && systemctl disable firewalld关闭selinux [rootVM-20-14-centos ~]# setenforce 0 && sed -i "s/SELINUXenforcing/SELINUXdisabled/g" /etc/selinux/config禁止s…

【Java】已解决java.lang.NullPointerException异常

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.lang.NullPointerException异常 一、问题背景 在Java编程中&#xff0c;java.lang.NullPointerException&#xff08;空指针异常&#xff09;是一种常见的运行时异常。当应…

封装音视频编解码和渲染的动态链接库编译和测试

1.动态链接库的编译 生成了以下几个文件 我们把生成的lib文件复制到lib文件夹中 其余三个文件不变动 2.进行测试看是否可以用生成的xcodec.lib库文件里的接口函数 以上是重新创建的新项目&#xff0c;导入了xcodec.lib&#xff0c;其他配置同以前项目 库测试结果 运行显示我们…

【Linux环境下Hadoop部署】— 报错“bash: myhadoop.sh: command not found“

项目场景&#xff1a; 执行 “myhadoop.sh stop” 命令。 问题描述 bash: myhadoop.sh: command not found 原因分析&#xff1a; 查看我们的系统配置&#xff0c;发现没有myhadoop.sh文件存放的路径。 解决方案&#xff1a; 1、执行 “sudo vim /etc/profile” 命令&#xff…

不入耳的蓝牙耳机平价推荐,五大爆款分析测评

开放式耳机在如今社会中已经迅速成为大家购买耳机的新趋势。它作为骨传导耳机&#xff0c;深受用户的喜爱&#xff0c;不仅可以随时感知周围环境&#xff0c;还提供了高质量的音效体验&#xff0c;对于热爱运动的人士而言&#xff0c;高品质的骨传导耳机无疑是首选。同时&#…

看完轻松解决家里灰尘毛絮多难题?除粉尘的空气净化器品牌分享

家里的空气中弥漫着灰尘和毛絮&#xff0c;让人呼吸不畅&#xff0c;也影响着家人的健康。灰尘中含有各种有害物质&#xff0c;如细菌、病毒、花粉等&#xff0c;长期吸入会导致呼吸道疾病、皮肤过敏等问题。尤其是对于有宠物、孩子、过敏人群来说&#xff0c;空气质量更是至关…

【Linux】进程间通信3——system V共享内存

1.system V进程间通信 管道通信本质是基于文件的&#xff0c;也就是说操作系统并没有为此做过多的设计工作&#xff0c;而system V IPC是操作系统特地设计的一种通信方式。但是不管怎么样&#xff0c;它们的本质都是一样的&#xff0c;都是在想尽办法让不同的进程看到同一份由操…

鸿蒙实现自定义Tabbar样式,显示数字红点提示

前言&#xff1a; DevEco Studio版本&#xff1a;4.0.0.600 Tabs的链接参考&#xff1a;OpenHarmony Tabs TabContent的链接参考&#xff1a;OpenHarmony TabContent 通过查看链接参考我们知道可以通过TabContent的tabBar来实现自定义TabBar样式&#xff08;CustomBuilder&…

SAP ABAP开发:如何读取物料主数据中的长文本?

在SAP ERP系统中&#xff0c;物料的基本描述可存储40个字符&#xff0c;见下图&#xff1a; 但长文本信息如何从系统中读取呢&#xff1f; 在SAP ABAP开发中&#xff0c;读取物料主数据&#xff08;Material Master Data&#xff09;中的基本视图&#xff08;Basic View&#…

UNetMultiLane 多车道线、车道线类型识别【训练+部署】

基于UNet 分割模型增加了检测头来识别车道线的类型&#xff08;单实线、双黄线等10种&#xff09;&#xff0c;同时可以识别出"所在车道"和"车道线类型"。 训练代码【训练练手代码】 1 数据说明 基于开源数据集 VIL100。其中数据标注了所在的六个车道的车…

《python程序语言设计》2018版第5章第49题l利用turtle绘制乘法口诀表,结果放在最后

2024.06.09 05.49.01version 2024.06.10 05.49.02 经历了一天的奔波&#xff0c;发了两篇博客 开始来到这道题。已经22点了 turtle.penup() turtle.goto(-80, 0) turtle.pendown() turtle.write("Multiplication Table\n", font("", 18, "")) t…

005-OSPF基本配置

OSPF基本配置 OSPF (Open Shortest Path First) 是一种链路状态路由协议&#xff0c;它属于内部网关协议&#xff08;IGP&#xff09;类别&#xff0c;用于在自治系统&#xff08;AS&#xff09;内部路由 IP 数据包。OSPF 通过使用 Dijkstra 算法计算最短路径树来确定到达每个…

SpringBoot + thymeleaf 修改文件,刷新页面不能实时展示修改后的内容问题解决

修改页面后文件后&#xff0c;刷新页面&#xff0c;内容不变&#xff0c;是因为项目没有编译&#xff0c;没有将新的页面文件编译&#xff0c;以下方法可以完美解决次问题 具体内容请查看&#xff1a;http://www.haozgx.top/blog/article/2

三星S20以上手机中的动态相片及其分解

三星S20以后的相机&#xff0c;相机拍出来的图片&#xff0c;用三星手机自带的“相册”打开之后&#xff0c;还会有“查看动态照片”的选项&#xff0c;点击之后就能查看拍照片时前后2秒左右的视频&#xff01; 不知道这个功能是不是三星独有的。 这样得到的图片非常大。因为…

Netty中Reactor线程的运行逻辑

Netty中的Reactor线程主要干三件事情&#xff1a; 轮询注册在Reactor上的所有Channel感兴趣的IO就绪事件。 处理Channel上的IO就绪事件。 执行Netty中的异步任务。 正是这三个部分组成了Reactor的运行框架&#xff0c;那么我们现在来看下这个运行框架具体是怎么运转的~~ 这…