LeetCode 144. Binary Tree Preorder Traversal

RK3576开发板ROS2部署实战:从Buildroot配置到Hello World Demo 本文详细介绍了在RK3576开发板上部署ROS2的完整实战流程。从Buildroot工程配置、集成ROS2依赖,到搭建Docker交叉编译环境、处理编译难题,最终完成系统镜像打包并在板端成功运行Talker-Listener Demo。该指南旨在帮助开发者深入理解嵌入式机器人系统的构建链,实现从底层到应用的完全掌控。 阅读详情

Given a binary tree, return the preorder traversal of its nodes' values.

For example:
Given binary tree {1,#,2,3},

   1
    \
     2
    /
   3

return [1,2,3].

Note: Recursive solution is trivial, could you do it iteratively?

分析:二叉树的前序遍历,通过递归的方式可以很容易获得,然而本题要求用迭代的方式,下面的Tags提示了可以使用stack,堆栈用来存储结点,模拟递归的过程。

java中 类LinkedList 提供了堆栈、队列、双向队列等操作方法。

代码一:以堆栈是否为空或当前结点是否为null为循环条件,先序遍历的顺序为:根左右。首先处理根节点,随后依次压入当前的左孩子,如果左孩子不为空,取出数据放于数组中,如果左孩子为空,则判断其右孩子,如不为空,将其数据加入数组并压入堆栈。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> listVal = new ArrayList<Integer>();
        LinkedList<TreeNode> listNode = new LinkedList<TreeNode>();
        if(root == null) return listVal;
        
        TreeNode p = root;
        while(!listNode.isEmpty() || p != null){
            
            if(p != null){
                listVal.add(p.val);
                listNode.push(p);
                p = p.left;
                continue;
            }else{
                TreeNode t = listNode.pop();
                p = t.right;
            }
        }
        
        return listVal;
    }
}

代码二:以堆栈是否为空为循环条件,先序遍历的顺序为:根左右。将每个结点都视为根节点,左右孩子不为null,则压入堆栈,先右后左。这种方法更有效率。


/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> listVal = new ArrayList<Integer>();
        LinkedList<TreeNode> listNode = new LinkedList<TreeNode>();
        if(root == null) return listVal;
        listNode.push(root);
        while(!listNode.isEmpty()){
            TreeNode temp = listNode.pop();
            listVal.add(temp.val);
            //堆栈先入后出,故先压入右孩子(如果存在),因为前序遍历的顺序是:根左右
            if(temp.right != null){
                listNode.push(temp.right);
            }
            if(temp.left != null){
                listNode.push(temp.left);
            }
        }
        return listVal;
    }
}


【CSP-J/S初赛知识点整理】 CSP-J/S初赛知识点整理 阅读详情

相关推荐

从零构建AXI接口的DDR3控制器:MIG IP核实战指南

本文详细介绍了如何从零构建AXI接口的DDR3控制器,重点解析MIG IP核的配置流程和优化策略。通过实战案例和仿真验证,帮助开发者掌握FPGA中DDR3控制器的AXI接口设计,提升高速数据传输效率。适用于图像处理、网络加速等高性能应用场景。

weixin_28256233的博客 451

[LeetCode] 144. Binary Tree Preorder Traversal

原题链接:https://leetcode.com/problems/binary-tree-preorder-traversal/ 1. 题目介绍 Given a binary tree, return the preorder traversal of its nodes’ values. 给出一个二叉树,返回它的前序遍历顺序。 前序遍历是指,首先访问根结点,然后遍历左子树,最后遍历右子树。 ...

Ber03的博客 344

别再花钱买商业软件了!这4款免费DIC工具,从散斑生成到应变分析全搞定

本文介绍了4款免费开源的DIC(数字图像相关技术)工具,涵盖从散斑生成到应变分析的全流程,帮助用户零成本构建专业级DIC工作流。这些工具在精度、算法透明度和生态整合方面具有优势,适用于材料力学和实验力学研究,可替代昂贵的商业软件。

weixin_42525369的博客 168

【Leetcode】144. Binary Tree Preorder Traversal

法2:用栈模拟递归。从树根开始,每次遍历左链,同时将非空右孩子入栈。左链遍历完毕之后从栈里弹一个元素,接着重复上述操作。法3:Morris遍历。这是通过“搭桥"和”拆桥“实现的常数空间的遍历方式。先序遍历二叉树,并存入一个list里。口诀:无桥搭桥向左走,有桥拆桥向右走。为二叉树深度,也就是递归栈深度。时空复杂度和之前一样。时间复杂度一样,空间。

数学、算法爱好者的博客 317

AI应用架构师总结:智能问答系统用户意图识别的8种方法与实践!

意图识别是智能问答系统的大脑入口,其技术水平决定了系统能否准确捕捉用户的核心诉求。本文系统剖析了从基础规则到前沿PLM的8种核心意图识别方法透明简单,冷启动快,维护成本高。中等规模场景基线,依赖特征工程。利用词义和局部/序列信息,训练成本高。当前最优精度,需大量资源。添加意图灵活,冷启动友好,精度可能略逊。提升鲁棒性,系统变复杂。解决歧义和自然交互的关键(多轮)。增强专业领域理解和推理能力。成功的意图识别模块需要:精准的意图定义(Schema)是前提!

AI云原生与云计算技术学院 1632

ethercat linux lan9252 - lan9253调试

linux 的ethercat测试

linsheng_111的专栏 1934

LeetCode //C - 144. Binary Tree Preorder Traversal

【代码】LeetCode //C - 144. Binary Tree Preorder Traversal。

Made in Code 1266

ISO15118-20协议测试实战:用Efficient XML库验证26条命令编解码(附完整代码)

本文分享了ISO15118-20协议测试实战经验,重点探讨了使用Efficient XML库对26条命令进行EXI编解码验证的过程。通过搭建测试环境、编写自动化程序并与官方工具链进行交叉比对,文章深入分析了4条命令编码结果不一致的原因,并提供了完整的排查思路与C代码示例,旨在帮助开发者确保电动汽车充电通信的协议一致性。

weixin_29284657的博客 108

Leetcode 144. Binary Tree Preorder Traversal

Leetcode 144. Binary Tree Preorder Traversal 问题描述:给出二叉树,写出其前序遍历结果,也就是根左右的顺序访问。 题目链接:144. Binary Tree Preorder Traversal 提供一下python版本的方法: 递归的版本 class Solution: def postorderTraversal(self, root):...

Za七杂⑧ 141

基于RK3588的YOLOv11目标检测NPU加速系统设计与实现——模型转换(RKNN)、量化与板端部署全流程(含环境搭建与疑难解析)

而RK3588芯片则是一款性能强劲的边缘计算芯片,将YOLOv11部署在RK3588上,可实现本地化的智能检测应用,比如工业质检中的产品缺陷识别、安防领域的异常行为监测等。比如,优化模型的推理速度,可通过调整模型的输入尺寸、使用更高效的推理框架等方式实现;可以使用RK提供的量化工具来完成这一过程,按照工具的使用说明,对ONNX模型进行量化,生成适用于RK3588的模型文件。现在,你已经掌握了从环境搭建到模型部署的全流程,赶快动手实践,让YOLOv11在RK3588上绽放智能光彩,打造属于你的AI应用吧!

m0_71589036的博客 45

图解B+树的插入过程

B+ 树在现代数据库中很常见,如果我们了解它,在工作中可能对性能优化会有更好的帮助! 最近我一直在思考 B+ 树的高度是由什么决定的。知道我了解了 B+ 树的插入过程,才有一种恍然大悟的感觉! 网上的一些资料杂乱无章,不同的数据库可能还有对 B+ 树有不同的实现。但是万变不离其宗,B+ 树的定义,大致如下所示: 总结一下,B+ 树有下面 5 个重要的特点。 B+ 树包含 2 种类型的结点: 内部结点(也称索引结点)和叶子结点。 根结点本身即可以是内部结点,也可以是叶子结点。 根结点的关键字个数最

愿君出走半生,归来时仍是少年 2134

LeetCode 144 Binary Tree Preorder Traversal

题目 Given a binary tree, return the preorder traversal of its nodes' values. Example: Input: [1,null,2,3] 1 \ 2 / 3 Output: [1,2,3] Follow up: Recursive sol...

乌鲁木齐001号程序员 93

OpenClaw 运行时错误文档:Embedded Run Agent End with Stream Error(嵌入式运行代理结束流式错误)

OpenClaw运行时错误文档:EmbeddedRunAgentEndwithStreamError(OC-ERR-009) 该错误表示LLM提供商在流式传输过程中发生服务器端异常(HTTP 500),属于可恢复的中等严重性错误。典型表现为日志中出现包含"stream_error"和500状态码的错误信息。系统会自动进行错误分类(50%为服务过载,25%网络问题等),并通过内置机制尝试解决:包括模型切换、API密钥轮换和自动重试策略。用户可采取重试请求、切换模型或简化请求内容等操作,管理

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 552

LeetCode - 144. Binary Tree Preorder Traversal

题目 LeetCode - 144. Binary Tree Preorder Traversal 题目链接 https://leetcode.com/problems/binary-tree-preorder-traversal/ 参考博客 https://blog.csdn.net/gatieme/article/details/51163010 解题思路 此图采用两种解法,递归和迭代。递归做...

virgilshi的博客 151

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【Leetcode 144】Binary Tree Preorder Traversal - MEDIUM

【Leetcode 144】Binary Tree Preorder Traversal - MEDIUM题目思路题解题解1题解2反思复杂度分析思路反思扩展 题目 Given a binary tree, return the preorder traversal of its nodes’ values. 给定一个二叉树,返回其前序遍历序列。 示例 思路 前序遍历(DLR),是二叉树遍历的...

weixin_43621681的博客 208

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【LeetCode】144. Binary Tree Preorder Traversal

我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 微信公众号介绍:Microstrong(小强)同学主要研究机器学习、深度学习、计算机视觉、智能对话系统相关内容,分享在学习过程中的读书笔记!期待您的关注,欢迎一起学习交流进步! 知乎主页:https://www.zhihu.com/people/MicrostrongAI/activities Git...

Microstrong 405

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

leetcode:144. Binary Tree Preorder Traversal

转载请注明出处:z_zhaojun的博客 原文地址 题目地址 Binary Tree Preorder TraversalGiven a binary tree, return the preorder traversal of its nodes' values.For example: Given binary tree {1,#,2,3}, return [1,2,3].思路:优先添

z_zhaojun的博客 1807

[LeetCode 144] Binary Tree Preorder Traversal

Binary Tree Preorder Traversal

qq_33864177的博客 298

leetcode [python] 【144】 Binary Tree Preorder Traversal

思路一:递归方法 # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(obje

Sophie94的博客 537

leetcode 144. Binary Tree Preorder Traversal

Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 \ 2 / 3 return [1,2,3]. Note: Recursive so

淡然坊 373

闯关leetcode——144. Binary Tree Preorder Traversal

这题就是考察二叉树的先序遍历:先根节点,再左子树,最后右子树。

方亮的专栏 718

LeetCode题解-144-Binary Tree Preorder Traversal

尽管写LeetCode解答主要是为了自己整理思路,但是如果对您也正好有帮助,请点个赞给菜鸟一点鼓励吧 :-) 原题 解法概览 本题共有两种解法,1种递归,1种迭代。 前序遍历:1)访问根节点;2)前序遍历左子树;3)前序遍历右子树。 解法1 解法分析 递归法。访问根节点,递归访问左子树,递归访问右子树。 代码 public class Soluti

WangT443的博客 489

Leetcode 144 Binary Tree PreOrder Traversal

题目描述: 要求使用非递归实现: 代码如下(C++版本) class Solution { public: vector&lt;int&gt; preorderTraversal(TreeNode* root) { vector&lt;int&gt; res; deque&lt;TreeNode*&gt; stack; if (root == NULL) retur...

u010540025的专栏 174

[Leetcode][python] 144. Binary Tree Preorder Traversal

144. Binary Tree Preorder Traversal 知识点:slack 1.原题 Given a binary tree, return the preorder traversal of its nodes’ values. Example: Input: [1,null,2,3] 1 \ 2 / 3 Output: [1,2,3] ...

qq_40670635的博客 258

LeetCode | 144. Binary Tree Preorder Traversal

题目: Given therootof a binary tree, returnthe preorder traversal of its nodes' values. Example 1: Input: root = [1,null,2,3] Output: [1,2,3] Example 2: Input: root = [] Output: [] Example 3: Input: root = [1] Output: [1] Example 4: ...

iLOVEJohnny的博客 1795

[LeetCode]144.Binary Tree Preorder Traversal

【题目】 Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 \ 2 / 3 return [1,2,3]. Note: Recu

SmartSi 2259
上一篇: LeetCode 268. Missing Number
下一篇: LeetCode 94. Binary Tree Inorder Traversal
Appletable
博客等级 码龄14年 0粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值