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

LeetCode.144. 二叉树的前序遍历

题目

144. 二叉树的前序遍历

分析

这道题目是比较基础的题目,我们首先要知道二叉树的前序遍历是什么?
就是【根 左 右】 的顺序,然后利用递归的思想,就可以得到这道题的答案,任何的递归都可以采用 的结构来实现,所以我会写两种方式来解决这道题目。

代码

递归版本

/*** 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> res = new ArrayList<>();func(root,res);return res;}void func(TreeNode cur,List<Integer> res) {if(cur == null) return;// 先记录根节点res.add(cur.val);// 遍历左子树func(cur.left,res);// 遍历右子树func(cur.right,res);}
}

在这里插入图片描述

非递归版本

需要借助栈这种数据结构,先把根节点入栈,判断栈是否为空,不为空弹出来栈顶元素,栈顶元素不为空,先把右子树加入栈里面,再把左子树加入栈里面,为空继续遍历栈。

/*** 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> res = new ArrayList<>();Stack<TreeNode> s = new Stack<>();s.push(root);while(!s.isEmpty()) {TreeNode node = s.pop();if(node != null) {res.add(node.val);}else {continue;}s.push(node.right);s.push(node.left);}return res;}}

在这里插入图片描述

http://www.lryc.cn/news/298341.html

相关文章:

  • Redis复制
  • C++入门学习(二十七)跳转语句—break语句
  • Spark安装(Yarn模式)
  • 1.4 Binance_interface API U本位合约行情
  • 单片机学习笔记---AT24C02(I2C总线)
  • c++恶魔轮盘制造第1期输赢
  • 60-JS-Ajax
  • C# Avalonia 折线图
  • Vue3中Setup概述和使用(三)
  • hexo 博客搭建以及踩雷总结
  • WordPress后台编辑个人资料页面直接修改用户名插件Change Username
  • ssm+vue的医药垃圾分类管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。
  • LLM大模型基本概念,及其相关问题汇总(1)
  • 【已解决】pt文件转onnx后再转rknn时得到推理图片出现大量锚框变花屏
  • DevOps文章之 操作手册用户使用说明书
  • 【RT-DETR进阶实战】利用RT-DETR进行视频划定区域目标统计计数
  • 2.11学习总结
  • 以谷歌浏览器为例 讲述 JavaScript 断点调试操作用法
  • Vue前端框架--Vue工程项目问题总结{脚手架 Vue-cli}
  • Unity2D 学习笔记 0.Unity需要记住的常用知识
  • vue3-应用规模化-单文件组件
  • Redis -- 渐进式遍历
  • 使用 C++23 从零实现 RISC-V 模拟器(3):指令解析
  • CSS Selector—选择方法,和html自动——异步社区的爬取(动态网页)——爬虫(get和post的区别)
  • C语言 服务器编程-日志系统
  • HarmonyOS 状态管理装饰器 Observed与ObjectLink 处理嵌套对象/对象数组 结构双向绑定
  • windows中的apache改成手动启动的操作步骤
  • Intellij Idea的数据库工具 DataGrip
  • 精品springboot疫苗发布和接种预约系统
  • Linux快速入门