408算法题leetcode--第16天

devtools/2024/10/18 12:30:01/

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

http://www.ppmy.cn/devtools/118138.html

相关文章

C语言中定义指针,函数指针这种类似的变量(个人纪录)

C语言中定义各种变量 //1、定义一个指针 int *p; //定义一个数组 int nums[3] {1, 2, 3}; //2、定义一个指针数组 // 顾名思义 是一个数组,数组里面都是存的指针变量。 int *ptrArray[10]; // 这是一个指针数组&#xff0c;包含10个指向整数的指针 …

测试用例的举例

1. 基于测试公式设计测试用例 通过功能&#xff0c;性能&#xff0c;安全性&#xff0c;界面&#xff0c;安全性&#xff0c;易用&#xff0c;兼容对于一个水杯进行测试用例的设计&#xff1b; 对于一个软件的测试用例设计&#xff1a; 功能&#xff1a;软件本质上能够用来干什…

【unity进阶知识1】最详细的单例模式的设计和应用,继承和不继承MonoBehaviour的单例模式,及泛型单例基类的编写

文章目录 前言一、不使用单例二、普通单例模式1、单例模式介绍实现步骤&#xff1a;单例模式分为饿汉式和懒汉式两种。 2、不继承MonoBehaviour的单例模式2.1、基本实现2.2、防止外部实例化对象2.3、最终代码 3、继承MonoBehaviour的单例模式3.1、基本实现3.2、自动创建和挂载单…

废品回收小程序:回收更加便捷!

在日常生活中&#xff0c;废品回收已经成为了一种常见事&#xff0c;随着电商的快速发展&#xff0c;居民难免会产生大量的废纸盒等可回收物&#xff0c;以及在日常生活中产生的其他回收物&#xff0c; 目前&#xff0c;废品回收市场也发生了改革&#xff0c;传统的“叫卖”方…

【嵌入式开发】有关16head(16接口点击器)相关的资料

16接口点击头产品运用ESP8266 ESP8266是一款功能强大的低成本WiFi芯片&#xff0c;它支持多种网络协议&#xff0c;能够实现各种网络通信功能。 点击学习详细内容 之前讲解的点击器是用串口连接后&#xff0c;使用触控头来控制的方法 后续会在CSDN上讲解该板子用http请求控制…

研究生如何利用 ChatGPT 帮助开展日常科研工作?

ChatGPT科研 一、 如何精读论文“三步提问法”1.为什么要做这个研究&#xff1f;这个研究是否值得我们做&#xff1f;2.他们怎么做这个研究3.他们发现了什么&#xff1f; 二、如何利用ChatGPT快速精读论文&#xff1f;首先&#xff0c;“三步走之第一步”--为什么要做这个研究&…

深度解读 2024 Gartner DevOps 魔力象限

上周 Gartner 刚发布了 2024 年度的 DevOps 魔力象限。我们也第一时间来深度解读一下这份行业里最权威的报告。 和2023年对比 23 年入围 14 家厂商&#xff0c;24 年入围 11 家。4 家厂商从报告中消失&#xff0c;分别是 Bitrise, Codefresh, Google Cloud Platform (GCP), VM…

【MySQL】表的操作

目录 一、增加表 二、查看表 2.1 查看当前数据库中的表 2.2 查看指定表的结构 2.3 查看创建表时的详细信息 2.4 查看表中所有数据 三、修改表 3.1 修改表名 3.2 插入数据 3.3 添加列 3.4 修改列类型 3.5 删除列 3.6 修改列名 四、删除表 一、增加表 增加表的语法…