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

408算法题leetcode--第16天

144. 二叉树的前序遍历

  • 144. 二叉树的前序遍历
  • 思路:递归和非递归
  • 时间:O(n);空间:O(n)
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<int>ret;void pre(TreeNode* root){if(root != nullptr){ret.push_back(root->val);pre(root->left);pre(root->right);}}vector<int> preorderTraversal(TreeNode* root) {pre(root);return ret;}
};

102. 二叉树的层序遍历

  • 102. 二叉树的层序遍历
  • 思路:bfs,队列
  • 时间:O(n);空间:O(n)
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>>ret;if(!root) return ret;queue<TreeNode*>q;q.push(root);while(!q.empty()){vector<int>level;int size = q.size();for(int i = 0; i < size; i++){TreeNode* temp = q.front();q.pop();level.push_back(temp->val);if(temp->left) q.push(temp->left);if(temp->right) q.push(temp->right);}ret.push_back(level);}return ret;}
};

199. 二叉树的右视图

  • 199. 二叉树的右视图
  • 思路和时间,空间:同上
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<int> rightSideView(TreeNode* root) {vector<int>ret;if(!root) return ret;queue<TreeNode*>q;q.push(root);while(!q.empty()){int size = q.size();for(int i = 0; i < size; i++){TreeNode* temp = q.front();q.pop();if(i == size - 1){ret.push_back(temp->val);}if(temp->left) q.push(temp->left);if(temp->right) q.push(temp->right);}}return ret;}
};

404. 左叶子之和

  • 404. 左叶子之和
  • 思路:dfs
  • 时间和空间:O(n)
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int traverse(TreeNode* root, bool is_left){if(!root) return 0;  // 节点为空if(!root->left && !root->right && is_left) return root->val;  // 叶子节点且为左子树 return traverse(root->left, true) + traverse(root->right, false);}int sumOfLeftLeaves(TreeNode* root) {// 三种情况:1. 节点为空;2. 叶子节点且为左子树 ; 3. elsereturn traverse(root, false);}
};

104. 二叉树的最大深度

  • 104. 二叉树的最大深度
  • 思路和时间空间:同上
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int maxDepth(TreeNode* root) {// 1. 有左右儿子,2. 空, 3. elseif(!root) return 0;int max_v = 1;if(root->left) max_v = maxDepth(root->left) + 1;if(root->right) max_v = max(max_v, maxDepth(root->right) + 1);return max_v;}
};

相关文章:

  • 【LeetCode:2535. 数组元素和与数字和的绝对差 + 模拟】
  • 使用 Napkins.dev 将草图转换为应用程序
  • 内网穿透的应用-Windows系统安装SeaFile并实现远程访问本地共享文件资料详细教程
  • 亲身体验Llama 3.1:开源模型的部署与应用之旅
  • asp.net mvc core 路由约束,数据标记DataTokens
  • Angular面试题十
  • 什么是Node.js?
  • centos7系统安装宝塔面板
  • 亚信安全天穹5分钟勒索体检 免费试用今起上线
  • 5.10直方图均衡化
  • 依赖倒转原则(DIP)
  • 19、网络安全合规复盘
  • 读数据湖仓01让数据可信
  • C语言进阶之泛型列表(Generic List)
  • java通过webhook给飞书发送群消息
  • 分享的文章《人生如棋》
  • Logstash 参考指南(目录)
  • Making An Indicator With Pure CSS
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Python_OOP
  • ReactNative开发常用的三方模块
  • React组件设计模式(一)
  • vuex 学习笔记 01
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 分享几个不错的工具
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 微信支付JSAPI,实测!终极方案
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 《码出高效》学习笔记与书中错误记录
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 选择阿里云数据库HBase版十大理由
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​MySQL主从复制一致性检测
  • ​ssh免密码登录设置及问题总结
  • # SpringBoot 如何让指定的Bean先加载
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #LLM入门|Prompt#3.3_存储_Memory
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (21)起落架/可伸缩相机支架
  • (Matlab)使用竞争神经网络实现数据聚类
  • (多级缓存)多级缓存
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (算法)前K大的和
  • (五)网络优化与超参数选择--九五小庞
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转) Face-Resources
  • (转) RFS+AutoItLibrary测试web对话框
  • .equals()到底是什么意思?
  • .gitattributes 文件
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET MVC之AOP
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .net Signalr 使用笔记