leetcode144. 二叉树的前序遍历

一、题目描述:

给你二叉树的根节点 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

三、先决知识点: 

四、思路讲解:

4.1递归思路:

  • 先判断当前节点是否为空。
  • 如果为空,直接返回。
  • 如果不为空,将节点值存储到vector中,递归当前节点的左子树和右子树。

4.2循环思路:

  • 创建一个vector对象,用于返回。然后判断根节点是否存在,如果不存在直接返回vector对象。
  • 主要思想是利用栈,将每个节点分为左边和右边处理。
  • 先处理左边,从根节点开始,一直向下找最左节点。期间将所有左节点的指针压栈,将节点值存储到vector中。先忽略所有路径上的右节点。
  • 找到最左节点后,开始出栈每一个左节点,处理左节点的右子树,期间将每一个右子树看作左节点来继续压栈。
  • 如果右节点为空,说明当前左节点已经全部处理完成。出栈下一个左节点,循环即可。
  • 最后,当栈的最后一个左节点被弹出,整个二叉树就被处理为了。

五、C++代码:

5.1递归实现:

    vector<int> preorderTraversal(TreeNode* root){vector<int> v;preorder(root,v);return v;}void preorder(TreeNode* root,vector<int>& v){if(root==nullptr)return;v.push_back(root->val);preorder(root->left,v);preorder(root->right,v);}

5.2循环实现:

vector<int> preorderTraversal(TreeNode* root){vector<int> v;if(root==nullptr)return v;stack<TreeNode*> s;while(!s.empty()||root!=nullptr){while(root!=nullptr){v.push_back(root->val);s.push(root);root=root->left;}root=s.top();s.pop();root=root->right;}return v;}

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

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

相关文章

ubuntu查看当前系统版本

要查看当前的Ubuntu系统版本&#xff0c;可以使用以下几种方法&#xff1a; 方法一&#xff1a;使用 lsb_release 命令 这是最常用的方法&#xff0c;适用于大多数Debian系发行版&#xff0c;包括Ubuntu。 lsb_release -a这将显示类似以下的输出&#xff1a; No LSB module…

移动app必须进行安全测试吗?包括哪些测试内容?

移动App已经成为我们日常生活中不可或缺的一部分&#xff0c;无论是社交娱乐还是工作学习&#xff0c;我们都离不开这些精心设计的应用程序。然而&#xff0c;随着移动App的广泛普及和使用&#xff0c;其安全性问题也逐渐浮出水面。为了确保用户数据的安全和减少潜在的风险&…

IOS全平台去开屏广告方案,真实有效

笔者最近被苹果平台上的APP开屏广告搞得心烦意乱&#xff0c;十分想念安卓的李跳跳&#xff0c;逐在B站搜索方法&#xff0c;看到评论说圈x可以去开屏广告。 但经一番搜索&#xff0c;发现圈x要求很高且貌似小火箭的规则生态更好。接下来是最经济的最有效的解决方案&#xff1a…

数智化浪潮下的零售品牌商品计划革新

在数字化和智能化交织的时代背景下&#xff0c;零售品牌的商品计划正在经历一场前所未有的革新。这场革新不仅改变了商品计划的方式和流程&#xff0c;更重塑了零售品牌的竞争格局和市场地位。 一、数智化&#xff1a;零售品牌的新引擎 在快速变化的市场环境中&#xff0c;零…

旧电视盒子的玩法与思路

旧的电视盒子&#xff0c;和电视主板&#xff0c;只要是安卓的&#xff0c;都不用丟。 留着有大用。 第一种玩法&#xff1a;也是我刚完盒子接触到的&#xff0c;就是刷游戏机&#xff0c;一般这种是把游戏系统刷到tf卡或者优盘上面&#xff0c;不妨碍你的盒子看电视&#xf…

序列到序列模型中的注意力机制

目录 一、说明 二、编码器解码器架构中的问题&#xff1a;需要注意 2.1 编码器方面的问题&#xff1a; 2.2 解码器方面的问题&#xff1a; 三、什么是注意力机制&#xff1f; 3.1 计算 ci 值&#xff1a; 3.2 ci 的广义表示&#xff1a; 四、Bahdanau 注意 &#xff1a; 4.1. 兼…

Centos/Ubuntu等Linux系统下增加扩展4个串口以上配置操作

linux(Ubuntu、centos等&#xff09;标准发行版系统默认是最多识别到4个COM串口设备&#xff0c;超过4个设备的串口则无法识别使用&#xff0c;想要载入使用则需要手动修改下grub配置文件&#xff0c;手动指定即可&#xff01;可以参考如下步骤&#xff0c;有出入的地方大家可以…

yt-dlp:强大的跨平台视频下载器

一、引言 在当今数字时代&#xff0c;视频已成为我们获取信息和娱乐的重要途径。然而&#xff0c;由于版权和网络限制&#xff0c;我们常常无法直接在本地保存我们喜爱的视频。幸运的是&#xff0c;有一个名为yt-dlp的命令行程序&#xff0c;它可以帮助我们从YouTube.com和其他…

Tomcat 概述与部署1

一、Tomcat服务器简介 Tomcat 是 Java 语言开发的&#xff0c;Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器&#xff0c;是 Apache 软件基金会的 Jakarta 项目中的一个核心项目&#xff0c;由 Apache、Sun 和其他一些公司及个人共同开发而成。 Tomcat 属于轻量级应…

【问题记录】解压文件出现:Cannot create symbolic link : 客户端没有所需的特权。

用7zip解压文件时候出现了如下错误&#xff1a; Cannot create symbolic link : 客户端没有所需的特权。 : C:\Users\86150\Downloads\mmpose_v1.0\mmpose.mim\tools Cannot create symbolic link : 客户端没有所需的特权。 : C:\Users\86150\Downloads\mmpose_v1.0\mmpose.mi…

自动化测试岗位的标准化求职指南(0到1)

简介&#xff1a; 自动化测试是软件开发过程中的关键环节&#xff0c;对于企业来说&#xff0c;招聘一名合适的自动化测试工程师非常重要。本文将从零开始&#xff0c;为想要从事自动化测试工作的求职者提供一份详细且规范的求职指南&#xff0c;帮助他们在自动化测试领域找到…

爱,需要学习--如何进入到一段亲密关系

[页面 7]: 亲密关系的经营&#xff0c; 是自我发展的延伸&#xff0c; 只不过和自我发展 相比&#xff0c; 亲密关系的经营有自己的逻辑&#xff0c; 它围绕着两个核心展 开。 [页面 7]: 一个核心是“关系”。“关系”不是你的事&#xff0c;也不是我的事&#xff0c;而 是发生…

猫头虎 分享已解决Bug || `Uncaught ReferenceError: x is not defined`✨

猫头虎 分享已解决Bug || Uncaught ReferenceError: x is not defined&#x1f680;✨ 摘要 ✨&#x1f4a1; 大家好&#xff0c;我是猫头虎&#xff0c;一名全栈软件工程师&#xff0c;同时也是一位科技自媒体博主。今天我要和大家分享一些前端开发过程中常见的Bug以及详细的…

Java | Leetcode Java题解之第147题对链表进行插入排序

题目&#xff1a; 题解&#xff1a; class Solution {public ListNode insertionSortList(ListNode head) {if (head null) {return head;}ListNode dummyHead new ListNode(0);dummyHead.next head;ListNode lastSorted head, curr head.next;while (curr ! null) {if (…

LeetCode 14. 最长公共前缀

LeetCode 14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 示例 1&#xff1a; 输入&#xff1a;strs [“flower”,“flow”,“flight”] 输出&#xff1a;“fl” 示例 2&#xff1a; 输入&#xff1a;s…

配置OSPF认证(华为)

#交换设备 配置OSPF认证-基于华为路由器 OSPF&#xff08;开放最短路径优先&#xff09;是一种内部网关协议&#xff08;IGP&#xff09;&#xff0c;用于在单一自治系统&#xff08;AS&#xff09;内决策路由。OSPF认证功能是路由器中的一项安全措施&#xff0c;它的主要用途…

JavaFX密码字段

PasswordField用于密码输入。用户键入的字符通过显示回显字符串被隐藏。 创建密码字段 以下代码使用来自PasswordField类的默认构造函数创建一个密码字段&#xff0c;然后为密码字段设置提示消息文本。 提示消息在字段中显示为灰色文本&#xff0c;并为用户提供该字段是什么的…

Android单例的几种实现方式

一、什么是单例模式&#xff1f; 确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。 这种模式适用于以下场景&#xff1a; 某些类只应该有一个实例&#xff0c;比如配置类、日志类等。当实例化需要消耗大量资源时&#xff0c;如数据库连接池、线程池等…

深入理解Java中的synchronized关键字

目录 前言 一、什么是synchronized 二、synchronized的底层实现 三、synchronized与其他同步机制的比较 四、synchronized的使用方式 1. synchronized的重入 2.synchronized的异常 前言 Java是一种面向对象的编程语言&#xff0c;以其强大的并发处理能力而闻名。在多线程…

LLM 理论知识

LLM 理论知识 一.大型语言模型LLM1.1 大型语言模型 LLM 的概念1.2 常见的 LLM 模型1.2.1 闭源 LLM (未公开源代码)1.2.1.1 GPT 系列1.2.1.1.1 ChatGPT1.2.1.1.2 GPT-4 1.2.1.2 Claude 系列1.2.1.1.3 PaLM/Gemini 系列1.2.1.1.4 文心一言1.2.1.1.5 星火大模型 1.2.2. 开源 LLM1.…