二叉树常见题目2

news/2024/12/15 14:56:00/文章来源:https://www.cnblogs.com/yaoguyuan/p/18607991

[Algo] 二叉树常见题目2

1. 最近公共祖先LCA

BinaryTreeNode *LCA(BinaryTreeNode *root, BinaryTreeNode *a, BinaryTreeNode *b)
{if (root == nullptr || root == a || root == b) return root;BinaryTreeNode *l = LCA(root->left, a, b), *r = LCA(root->right, a, b);if (l == nullptr && r == nullptr) return nullptr;if (l != nullptr && r != nullptr) return root;return l == nullptr ? r : l;
}

2. 累加和为aim的所有路径

vector<vector<int>> path_list; //最终结果
vector<int> cur_path;
int cur_sum;
// 2. 累加和为aim的所有路径
void sumPath(BinaryTreeNode *root, int aim)
{if (root == nullptr) return;if (root->left == nullptr && root->right == nullptr){// 当前节点是叶节点if (cur_sum + root->val == aim){cur_path.push_back(root->val);path_list.push_back(cur_path);cur_path.pop_back();}}else{// 非叶节点cur_sum += root->val;cur_path.push_back(root->val);sumPath(root->left, aim);sumPath(root->right, aim);cur_sum -= root->val;cur_path.pop_back();}
}

3. 判断平衡二叉树

struct retStruct1
{int h; // 树的高度bool flag; // 是否是平衡二叉树
};
retStruct1 process1(BinaryTreeNode *root)
{if (root == nullptr) return retStruct1{0, true};retStruct1 ret_l = process1(root->left);retStruct1 ret_r = process1(root->right);retStruct1 ret;ret.flag = ret_l.flag && ret_r.flag && abs(ret_l.h - ret_r.h) <= 1;ret.h = max(ret_l.h, ret_r.h) + 1;return ret;
}
// 3. 判断平衡二叉树
bool isBBT(BinaryTreeNode *root)
{return process1(root).flag;
}

4. 判断搜索二叉树

struct retStruct2
{long long max; // 最大值long long min; // 最小值bool flag; // 是否是搜索二叉树
};
retStruct2 process2(BinaryTreeNode *root)
{if (root == nullptr) return retStruct2{INT64_MIN, INT64_MAX, true};retStruct2 ret_l = process2(root->left);retStruct2 ret_r = process2(root->right);retStruct2 ret;ret.max = max(max(ret_l.max, ret_r.max), (long long)root->val);ret.min = min(min(ret_l.min, ret_r.min), (long long)root->val);ret.flag = ret_l.flag && ret_r.flag && ret_l.max < root->val && ret_r.min > root->val;return ret;
}
// 4. 判断搜索二叉树
bool isBST(BinaryTreeNode *root)
{return process2(root).flag;
}

5. 打家劫舍

struct retStruct3
{int withMax; // 包含当前节点的最大值int withoutMax; // 不包含当前节点的最大值
};
retStruct3 process3(BinaryTreeNode *root)
{if (root == nullptr) return retStruct3{0, 0};retStruct3 ret_l = process3(root->left);retStruct3 ret_r = process3(root->right);return retStruct3{root->val + ret_l.withoutMax + ret_r.withoutMax, max(ret_l.withMax, ret_l.withoutMax) + max(ret_r.withMax, ret_r.withoutMax)};
}
// 5. 打家劫舍
int rob(BinaryTreeNode *root)
{retStruct3 result = process3(root);return max(result.withMax, result.withoutMax);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/853295.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

性能测试-内存溢出时的分析工具使用

下载内存分析工具地址:https://eclipse.dev/mat/downloads.phphp)下载对应的版本,我这里使用的windows的就下载windows版本的包,下载完成后解压配置启动时的jdk的依赖,目前1.15.0版本的需要jdk17以上,我们在启动时需要手工修改MemoryAnalyzer.ini文件,添加指定的jdk的本地…

性能测试-jvm监控工具jivsualvm

官方网站下载:https://visualvm.github.io/download.html下载zip文件解压到本地后,需要修改启动对应的系统环境的jdk的地址,visualvm_2110\etc 的目录下的 visualvm.conf 文件,配置当前环境的jdkhome后保存visualvm_2110\bin目录下,点击 visualvm.exe 启动程序安装GC插件 …

鲜花:16。

又老了一岁了。 一下子就沧桑了许多。“低沉-狂喜-低沉-狂喜”的循环往复,终究是走向疯癫。 接连三次的挫败,几乎毁了我的一切。 终究是自己不够成熟导致的。 生日,很想哭。 失败,会更多。

性能测试-jvm监控工具jconsole

在jdk的bin目录下,运行jconsole.exe 程序可以打开工具在使用 java 命令启动服务时 添加如下参数 -Dcom.sun.management.jmxremote # 启用 jmx -Djava.rmi.server.hostname=10.0.0.100 # 运行的服务器ip -Dcom.sun.management.jmxremo…

2024-2025-1 20241417 《计算机基础与程序设计》第十二周学习总结

2024-2025-1 20241417 《计算机基础与程序设计》第十二周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>2024-2025-1计算机基础与程序设计第十二周作业这个作业的目标 <复习前…

PbootCMS中如何让后台输入的换行符在前台正确显示?

在PbootCMS中,如果你在后台输入的内容中包含换行符(如 <br>),但前台显示时这些换行符被当作普通文本输出(例如显示为 <br>),你可以通过使用格式化标签来解决这个问题。具体做法是在调用内容的标签中添加 decode=1 参数。例如,如果你原本的代码是 {sort:sub…

如何在PbootCMS中获取搜索页的关键词和搜索结果数量?

在PbootCMS中,你可以通过特定的标签来获取搜索页的关键词和搜索结果的数量。以下是如何使用这些标签的详细说明和一些扩展建议:获取搜索关键词:在搜索页模板search.html中,使用标签{$get.keyword}来获取用户输入的搜索关键词。 例如:html<h1>搜索结果:{$get.keywor…

PbootCMS后台登录验证码看不清怎么办?

在使用PbootCMS时,有时会遇到后台登录验证码看不清的问题。这通常是由于PHP版本不兼容导致的。以下是如何解决这一问题的详细步骤和注意事项。问题原因分析:PHP版本不支持:验证码看不清的问题通常是由于服务器上的PHP版本不支持PbootCMS的验证码生成功能。不同版本的PHP对某…

VS2022 配置openCV方法

第一步下载opencv库解压出来这里不做过多讲解第二步配置环境变量 %path%\build\x64\vc16\bin %path%这个替换成自己的路径 然后打开项目属性设置点击VC++目录 链接器、输入、附件依赖分别添加 前面的是我自己的目录 换成你们自己目录即可 第一步添加 库目录D:\Opencv\ope…

WPF TreeView实现固定表头

1、在WPF中TreeView默认不支持固定表头的我们可以修改样式实现固定表头新建一个TreeListView类 然后继承TreeView代码如下public class TreeListView : TreeView,IDisposable{public TreeListView(){//this.Loaded += TreeListView_Loaded;//this.SizeChanged += TreeListView_…

居家徒手健身

居家徒手健身 力竭组,组间歇2min,动作变形算力竭为一组 第一天:胸+三头 动作: 宽距俯卧撑6组(胸外延) 标准俯卧撑4组胸整体 钻石俯卧撑4组(胸中缝) 板凳臂屈伸4~8组(三头) 第二天:肩 +腿 动作: 折刀俯卧撑6~10组(肩中束) 腰间俯卧撑4~6组 (肩前束) 弹力绳深蹲6组…

个人网站建站日记-集成Markdown编辑器

一次偶然的机会,我体验的到了markdown的便捷,于是乎,我就着手给我的网站闲蛋博客社区集成了Markdown,现在可以自由的切换Markdown与富文本编辑的使用了。这里我特此分享记录下安装使用的过程。 一、安装Markdown编辑器 这里我采用的是md-editor-v3编辑器,目前看来还是很好…