#include <iostream>
#include <queue>
#include <vector>
using namespace std;
/**
* 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) {}
* };
*/
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> levelOrder(TreeNode* root) {
vector<int> result;
if(root == nullptr) {
return result;
}
queue<TreeNode*> que;
int depth = 1;
que.push(root);
while (!que.empty()) {
int count = que.size();
int curLevelMax = INT_MIN;
while(count > 0) {
TreeNode* node = que.front();
que.pop();
curLevelMax = node->val > curLevelMax ? node->val : curLevelMax;
if(node->left)
que.push(node->left);
if(node->right)
que.push(node->right);
count--;
}
result.push_back(curLevelMax);
}
return result;
}
vector<int> getIndex(TreeNode *root, vector<int> target) {
// 先进行bfs
vector<int> bfs_result = levelOrder(root);
//打印bfs结果
cout << "bfs result :" << endl;
for(auto each_col : bfs_result) {
cout << each_col << " " << endl;
}
// 然后依次比较
vector<int> index_result;
int cur_max_depth = -1;
for(auto each_targe : target) {
for(int i = bfs_result.size() - 1; i >= 0; i--) {
if(bfs_result[i] > each_targe) {
cur_max_depth = i+1;
break;
}
}
index_result.push_back(cur_max_depth);
cur_max_depth = -1;
}
return index_result;
}
};
int main() {
std::cout << "Hello, World!" << std::endl;
TreeNode root(3);
TreeNode l1_1(4);
TreeNode l1_2(11);
TreeNode l2_1(3);
TreeNode l2_2(8);
TreeNode l3_1(7);
TreeNode l3_2(5);
root.left = &l1_1;
root.right = &l1_2;
l1_1.left = &l2_1;
l1_2.right = &l2_2;
l2_1.left = &l3_1;
l2_2.right = &l3_2;
Solution s1;
vector<int> target = {6,2,9,7,9};
vector<int> com_result =s1.getIndex(&root, target);
cout << "result " << endl;
for(auto each : com_result)
cout << each << " ";
return 0;
}
相关推荐
【数字电源/MATLAB+PLECS】如何进行 Buck 数字电源仿真(二)PLECS 搭建开环 Buck 功率级
本文介绍了如何在PLECS中搭建开环Buck功率级模型,验证数字电源设计的基本思路。重点内容包括: 明确开发顺序:先开环验证功率级,再闭环设计控制器 搭建关键组件:输入电源、PWM模块、MOSFET开关、续流二极管、LC滤波电路及负载 设置初始参数:24V输入、12V输出、200kHz开关频率、22μH电感、100μF电容 测量关键波形:MOSFET Vds验证开关动作、电感电流纹波和输出电压稳态值 提供完整仿真模型和GitHub资源,便于读者复现验证 文章强调通过开环测试先确保功率级正确性,为后续闭环控制
力扣(LeetCode)数据结构练习题
这里我们从题目可知我们要将nums2合并到nums1中,其中nums1的长度为m+n,那么如果我们从nums1的前面开始排序,我们就会因为排序而丢失前面nums1原来的值,所以我们就要从末尾开始排序,所以我们在代码中先定义出三个整形变量end1,end2,end,分别进行运算,进行while循环在两个数组都没比较结束到首元素时我们进行比较后放入nums1的末尾,当有一个nums1的比较元素已经到首元素时,如果nums2的元素还没比较完,那么我们就需要将nums2的元素全排在前面即可。
【UE 反射】反射的原理是什么?如何使用机制?
静态类型检查确保了类型的早期一致性和高效的代码执行,但减少了灵活性。动态类型检查提供了更大的灵活性,但增加了运行时的开销和潜在的错误。反射作为一种动态特性,无论是在静态类型语言还是动态类型语言中,都提供了强大的运行时类型操作能力,但也伴随着性能和安全性方面的权衡。通过理解这些联系,开发者可以在不同的编程语言和应用场景中选择适合的类型检查方式和反射机制,以实现所需的动态行为和灵活性,同时保证性能和安全性。
力扣练习题题库(持续更新)
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串。输入不存在公共前缀。
【TELEMAC V8P4】TELEMAC-2D 用户手册核心概念与应用场景速览
本文深入解析了TELEMAC-2D水动力模型的核心概念与应用。作为基于二维浅水方程的开源数值模拟工具,TELEMAC-2D广泛应用于河流动力学、洪水演进、污染物输运及泥沙运动模拟。文章结合用户手册与实战经验,详细拆解了其理论框架、关键物理过程(如湍流模型、干湿网格处理),并提供了从模型搭建、文件配置到典型场景(如工程评估、污染应急、洪水模拟)的实用指南,帮助用户快速掌握这一强大工具。
Python爬虫实战:爬取携程旅游平台数据,我拆解了动态反爬+Cookie续命(附完整可运行代码)
反爬类型表现形式应对思路sign参数返回403/空数据逆向JS还原加密逻辑Cookie时效登录后1小时Cookie失效定时刷新Cookie/保存登录态行为检测爬取过快触发验证码模拟真人延时/随机点击IP封禁单IP爬取超50条数据被封付费代理池/降低请求频率爬取携程旅游平台数据的核心,不是“简单的HTTP请求”,而是“理解平台的反爬逻辑并合规适配”——从sign参数破解到Cookie维护,再到行为模拟,每一步都是对HTTP协议、前端加密、用户行为的深度理解。
力扣mysql练习题01(简单)
力扣mysql练习题01(简单) 题目 Create table Person (PersonId int, FirstName varchar(255), LastName varchar(255)) Create table Address (AddressId int, PersonId int, City varchar(255), State varchar(255)) Truncate table Person insert into Person (PersonId, LastName, Fi
基于 ESP32 与 TDS 传感器的水培营养液离子浓度自动配比系统设计与实现
本系统以 ESP32 为主控芯片,结合 TDS(总溶解固体)传感器实时监测水培营养液中的离子浓度,通过蠕动泵自动补充浓缩营养液或清水,实现营养液 EC 值的闭环自动配比。系统适用于家庭及小型农场的水培种植场景,可稳定维持营养液浓度在作物生长所需的最佳区间。
【线性表】- LeetCode力扣三道练习题详解
作者:甘城なつき 文章简介:LeetCode题目:27. 移除元素 26. 删除有序数组中的重复项 88. 合并两个有序数组 三道 OJ 题详解。
出现 RuntimeError: adaptive_avg_pool2d_backward_cuda does not have a deterministic implementation的解决方法
大致就是在执行主函数的训练函数中,在反向传播这一块出现了问题。解决方法就是添加如下代码块。找到提示bug的行数。
渗透测试工具之Sliver
攻击者需要将生成的植入物传输到目标系统,并执行它。C2 框架的架构与 Metasploit(如 Meterpreter)类似,但更专注于。(Red Teaming)中常见的攻击工具之一,攻击者利用 C2 服务器。组成,二者共同实现 C2 服务器与受控设备的通信。植入物(Implants)是 Sliver 生成的。抓包分析时,可以看到所有数据都是加密传输的。和**监听器(Listeners)**功能。Sliver 支持多种通信协议,如。随着安全防御的不断提升,企业应加强。进行通信,数据仍然是加密的。
LeetCode-SQL练习题总结(MySQL实现)
LeetCode上的SQL练习题一共有十九道,题目网址:https://leetcode-cn.com/problemset/database/ 本文将对其中的部分题做一个总结。 176.查询第二高的薪水: 编写一个 SQL 查询,获取Employee表中第二高的薪水(Salary)。 +----+--------+ | Id | Salary | +----+--------+...
SAP-ABAP:接口多继承与复合接口设计:复杂业务场景下的能力组合实现方案
本文介绍了ABAP中通过接口多继承与复合接口设计实现能力组合的方案。文章首先辨析了类实现多个接口与接口继承接口的核心概念,指出ABAP虽不支持类多继承,但可通过这两种机制灵活组合能力。随后详细讲解了类实现多个接口的语法规则与三种调用方式,并给出了五个基础能力接口的设计示例(日志记录、权限校验、数据导出、消息通知、格式转换)。作者通过对比单继承与接口多重实现的差异,强调后者在解耦和扩展性上的优势,为复杂业务场景下的能力组合提供了实用解决方案。
【力扣练习题】【双指针】14-最长公共前缀
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
力扣leetcode数组和字符串练习题
力扣leetcode数组和字符串练习题
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
【力扣练习题】【迭代法】206. 反转链表
在这里插入图片描述。
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
【力扣练习题】【递归】144/94/145. 二叉树的前、中、后序遍历
前序:中序:后序:在这里插入图片描述。
Leetcode力扣必备算法知识和练习题
https://www.bilibili.com/video/BV1xt4y1e7q4?p=1 一、双指针算法 | Two Pointers 双指针算法是指利用两个指针遍历数组(链表),左右指针相向前进或同向前进,在遍历过程中根据某种限制条件进行筛选,通常可以把时间复杂度降低至O(n)。 普通双指针:两个指针同向移动 对撞双指针:两个指针面对面移动 快慢双指针:慢指针+快指针 1、快慢指针 141. 环形链表 public boolean hasCycle(ListNode ..
Leetcode练习题:动态规划
Leetcode练习题:动态规划_不要偷懒xj的博客-优快云博客
【力扣练习题】【双指针】28-找出字符串中第一个匹配项的下标
力扣关于链表有关的练习题
力扣链表题目
【力扣练习题】【数组】27- 移除元素
【力扣练习题】【数组】27- 删除有序数组中的重复项@
【树结构与栈】中等力扣练习题
二叉树中和为目标值的路径:给你二叉树的根节点root和一个整数目标和targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。叶子节点是指没有子节点的节点。彩灯装饰记录I:一棵圣诞树记作根节点为root的二叉树,节点值为该位置装饰彩灯的颜色编号。请按照从左到右的顺序返回每一层彩灯编号。验证图书取出顺序:现在图书馆有一堆图书需要放入书架,并且图书馆的书架是一种特殊的数据结构,只能按照一定的顺序放入和拿取书籍。给定一个表示图书放入顺序的整数序列p
【力扣练习题】【双指针】160-相交链表
如果指针 pA 为空,则将指针 pA 移到链表 headB 的头节点;如果指针 pB 为空,则将指针 pB 移到链表 headA 的头节点。如果指针 pA 不为空,则将指针 pA 移到下一个节点;如果指针 pB 不为空,则将指针 pB 移到下一个节点。当指针 pA 和 pB 指向同一个节点或者都为空时,返回它们指向的节点或者 null。每步操作需要同时更新指针 pA 和 pB。
力扣(LeetCode)数据结构练习题(2)
这里的题目也是很明了的,让我们返回一个中间节点就行了 ,那么我们要解决的就是如何找到中间节点,很多人想的办法是遍历一遍求出长度,然后又遍历到中间节点返回,但是这样就会增加时间复杂度了。然后我们就可以将代码往后遍历,这时n3的作用就是提前记住原来n2的next,然后令n2=n3,n1=n2,即可完成往后遍历。现在我们来审题,题目很明了让我们反转一个单向链表,那么这里我们就可以简单思考一下思路了,有了思路我们就可以开始尝试一下写代码了。我们这里是将节点里的指针进行反转即可完成链表的反转。
1218



被折叠的 条评论
为什么被折叠?



