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

Leetcode刷题笔记--Hot41-50

1--二叉树的层序遍历(102)

主要思路:

        经典广度优先搜索,基于队列;

        对于本题需要将同一层的节点放在一个数组中,因此遍历的时候需要用一个变量 nums 来记录当前层的节点数,即 nums 等于队列元素的数目;

#include <iostream>
#include <vector>
#include <queue>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:std::vector<std::vector<int>> levelOrder(TreeNode* root) {std::vector<std::vector<int>> res;if(root == nullptr) return res;std::queue<TreeNode*> q;q.push(root);while(!q.empty()){int nums = q.size(); // 当前层的节点数std::vector<int> tmp;while(nums > 0){ // 遍历处理同一层TreeNode *cur = q.front();q.pop();tmp.push_back(cur->val);if(cur->left != nullptr) q.push(cur->left);if(cur->right != nullptr) q.push(cur->right);nums--;}res.push_back(tmp); // 记录当前层的元素}return res;}
};int main(int argc, char* argv[]){// root = [1, null, 2, 3]TreeNode *Node1 = new TreeNode(3);TreeNode *Node2 = new TreeNode(9);TreeNode *Node3 = new TreeNode(20);TreeNode *Node4 = new TreeNode(15);TreeNode *Node5 = new TreeNode(7);Node1->left = Node2;Node1->right = Node3;Node3->left = Node4;Node3->right = Node5;Solution S1;std::vector<std::vector<int>> res = S1.levelOrder(Node1);for(auto item : res) {for (int v : item) std::cout << v << " ";std::cout << std::endl;}return 0;
}

2--二叉树的最大深度

主要思路:

        递归计算左右子树的深度,选取两者最大值 +1 返回;

#include <iostream>
#include <vector>
#include <queue>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) {if(root == nullptr) return 0;int res = dfs(root);return res;}int dfs(TreeNode* root){if(root == nullptr) return 0;int left_height = dfs(root->left);int right_height = dfs(root->right);int cur_height = std::max(left_height, right_height) + 1;return cur_height;}
};int main(int argc, char* argv[]){// root = [3,9,20,null,null,15,7]TreeNode *Node1 = new TreeNode(3);TreeNode *Node2 = new TreeNode(9);TreeNode *Node3 = new TreeNode(20);TreeNode *Node4 = new TreeNode(15);TreeNode *Node5 = new TreeNode(7);Node1->left = Node2;Node1->right = Node3;Node3->left = Node4;Node3->right = Node5;Solution S1;int res = S1.maxDepth(Node1);std::cout << res << std::endl;return 0;
}

3--从前序与中序遍历序列构造二叉树

主要思路:

        

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

相关文章:

  • 「MySQL-02」数据库的操纵、备份、还原和编码规则
  • Effective C++条款24——若所有参数皆需类型转换,请为此采用non-member涵数(设计与声明)
  • 决策工具箱:战略分析必备工具与框架
  • 【压力测试指南】没有任何文档,小白也可以做的压力测试
  • Linux: memory: memblock: debug
  • 搬家快递服务小程序的便利性
  • 软件架构师 Debugging
  • ​7.1 项目1 学生通讯录管理:文本文件增删改查(C++版本)(自顶向下设计+断点调试) (A)​
  • 学习使用php判断阿里云oss图片单图或批量上传、查询图片文件是否存在
  • 重磅| Falcon 180B 正式在 Hugging Face Hub 上发布!
  • Linux命令行
  • [持续更新]计算机经典面试题基础篇Day1
  • ProcessWindowFunction 结合自定义触发器的陷阱
  • 什么是jvm
  • kettle通过java步骤获取汉字首拼
  • Conformer: Local Features Coupling Global Representationsfor Visual Recognition
  • java8-Stream流常用API
  • React 任务调度
  • 小白开始学习C++
  • SpringMVC入门的注解、参数传递、返回值和页面跳转---超详细教学
  • 【复习socket】每天40min,我们一起用70天稳扎稳打学完《JavaEE初阶》——28/70 第二十八天
  • vue2踩坑之项目:生成二维码使用vue-print-nb打印二维码
  • 【iVX】十五分钟制作一款小游戏,iVX真有怎么神?
  • SpringMVC常用注解、参数传递、返回值
  • 新公司第一次上架新APP需要提前准备哪些材料?
  • 『C语言进阶』指针进阶(一)
  • 2605. 从两个数字数组里生成最小数字(Java)
  • 深度解析 PostgreSQL Protocol v3.0(一)
  • Mysql中having语句与where语句的用法与区别
  • 基于qt软件的网上聊天室软件