当前位置: 首页 > news >正文

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;}

相关文章:

  • python学习笔记-10
  • 新版本vue-cli打包之后没有css文件
  • 数据分析:解锁业务洞察与决策优化的关键
  • android之WindowManager悬浮框
  • C#面:C# 类的执行顺序?
  • [pmayavi][python]mayavi所有whl文件下载地址汇总
  • “探索未来之音:AI音乐创作的前沿技术与应用“
  • 安卓逆向案例——XX电影网
  • Ilya出走记:SSI的超级安全革命
  • Python面试宝典:Python中与常用的机器学习库相关的面试笔试题(1000加面试笔试题助你轻松捕获大厂Offer)
  • 设置Docker容器开机自启
  • 硬件开发笔记(二十一):外部搜索不到的元器件封装可尝试使用AD21软件的“ManufacturerPart Search”功能
  • 动态规划:Leetcode 739. 每日温度
  • 【gdb 如何生成并查看core dump】
  • Gobject tutorial 九
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • golang 发送GET和POST示例
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Linux下的乱码问题
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Redis在Web项目中的应用与实践
  • vue学习系列(二)vue-cli
  • 前端存储 - localStorage
  • 前端面试总结(at, md)
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • !!Dom4j 学习笔记
  • (007)XHTML文档之标题——h1~h6
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (3)STL算法之搜索
  • (Note)C++中的继承方式
  • (poj1.3.2)1791(构造法模拟)
  • (多级缓存)多级缓存
  • (分布式缓存)Redis哨兵
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (过滤器)Filter和(监听器)listener
  • (接口自动化)Python3操作MySQL数据库
  • (四)鸿鹄云架构一服务注册中心
  • (算法)N皇后问题
  • (循环依赖问题)学习spring的第九天
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • **CentOS7安装Maven**
  • .NET8 动态添加定时任务(CRON Expression, Whatever)
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • @GlobalLock注解作用与原理解析
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @SuppressWarnings注解
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [BZOJ] 2427: [HAOI2010]软件安装
  • [C#]C# winform部署yolov8目标检测的openvino模型
  • [C#]OpenCvSharp 实现Bitmap和Mat的格式相互转换
  • [C++初阶]vector的初步理解
  • [DL]深度学习_Feature Pyramid Network
  • [docker] Docker容器服务更新与发现之consul