【算法通关指南:数据结构与算法篇】二叉树相关算法题:1.美国血统 American Heritage 2.二叉树问题

【算法通关指南:数据结构与算法篇】二叉树相关算法题:1.美国血统 American Heritage 2.二叉树问题
在这里插入图片描述
🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人方向学习者
❄️个人专栏:《算法通关指南》
永远相信美好的事情即将发生
在这里插入图片描述

文章目录


前言

本专栏聚焦算法题实战,系统讲解算法模块:以《c++编程》,《数据结构和算法》《基础算法》《算法实战》 等几个板块以题带点,讲解思路与代码实现,帮助大家快速提升代码能力ps:本章节题目分两部分,比较基础笔者只附上代码供大家参考,其他的笔者会附上自己的思考和讲解,希望和大家一起努力见证自己的算法成长

一、美国血统 American Heritage

1.1题目

链接:美国血统 American Heritage

在这里插入图片描述

1.2 算法原理

解法同《求先序序列》,先手动动模拟一下,然后找出「相同子问题」,「递归」求解。
步骤:
(1)先处理左右子树
(2)找根节点
(3)划分左右子树

1.3代码

#include <iostream> using namespace std; string a, b; void dfs(int l1, int r1, int l2, int r2){//递归窗口if(l1 > r1)return;//寻找中序遍历中根节点的位置 int p = l1;while(a[p]!= b[l2]) p++;//递归处理左右子树dfs(l1,p -1,l2 +1,l2 + p - l1);//左子树dfs(p +1,r1,l2 + p - l1 +1,r2);//右子树//根节点 cout << b[l2];} int main(){ cin >> a >> b;dfs(0,a.size()-1,0,b.size()-1);return0;}

二、 二叉树问题

2.1题目

链接:二叉树问题

在这里插入图片描述

2.2 算法原理

深度: 递归。
宽度: 宽搜。
最近公共祖先: 两点之间的距离:通过向上不断找父亲结点。第⼀个重叠的位置,就是两者的最近公共祖先。可以一边寻找,一边计算结果。

2.3代码

//二叉树问题 #include <iostream> #include <vector> #include <queue> using namespace std; const int N =110; vector<int> tree[N]; int fa[N];//f[i]:i的父亲节点 int dest[N];//dest[i]:x到i经历的节点个数// 深度 int dfs(int u){ int ret =0;for(auto v : tree[u]) ret =max(ret,dfs(v));return ret +1;}// 宽度 int bfs(){ queue<int> q; q.push(1); int ret =0;while(q.size()){ int sz = q.size(); ret =max(ret, sz);while(sz--){ auto x = q.front(); q.pop();for(auto v : tree[x]) q.push(v);}}return ret;} int main(){ int n; cin >> n;for(int i =1; i < n; i++){ int u, v; cin >> u >> v; tree[u].push_back(v); fa[v]= u;}//深度 cout <<dfs(1)<< endl;//宽度 cout <<bfs()<< endl;//距离 int x, y; cin >> x >> y;while(x !=1){ dest[fa[x]]= dest[x]+1; x = fa[x];} int len =0;while(y !=1&& dest[y]==0){ y = fa[y]; len++;} cout <<2* dest[y]+ len << endl;return0;}

总结与每日励志

✨本章通过两道经典二叉树算法题,带你巩固递归、深搜、宽搜等核心思想。从美国血统的遍历重建,到二叉树深度、宽度与公共祖先求解,每道题都在训练分治思维与代码实现能力。算法之路无捷径,坚持刷题、理清思路、动手实现,能力便会稳步提升。保持热爱,脚踏实地,每一行代码、每一次思考,都在为更强的自己铺路,永远相信美好的事情即将发生。

在这里插入图片描述

Read more

LFU缓存算法全解:从双哈希+双向链表到O(1)艺术,解锁长期热点守护神

LFU缓存算法全解:从双哈希+双向链表到O(1)艺术,解锁长期热点守护神

文章目录 * 本篇摘要 * 一、核心原理 * 二、关键特性与实现机制 * 1. **数据结构设计(高效实现的核心)** * 2. **频率动态更新** * 3.实现思想及代码测试 * 4.为什么LFU用 双哈希表 + 双向链表? * 三、典型优势与劣势 * **优势场景** * **劣势与挑战** * 四、典型问题与优化策略 * 1. **新数据冷启动优化** * 2. **频率衰减(避免历史权重过高)** * 五、适用场景与典型用例 * 六、LFU vs LRU 对比 * 八、一句话总结 * 九、模版源码 * 本篇小结 本篇摘要 一、核心原理 基础规则: 优先淘汰历史访问频率最低的数据(长期统计维度)。 * 每个缓存条目维护两个核心属性:键值对数据 + 访问频率计数器。当缓存容量达到上限时,

By Ne0inhk
【笔试】算法的暴力美学——牛客 NC221681:dd爱框框

【笔试】算法的暴力美学——牛客 NC221681:dd爱框框

一、题目描述 二、算法原理 思路:滑动窗口 1)定义两个指针,一开始都为0,cur 从左开始遍历,定义一个 sum 来表示 prev 到 cur 的之间的值的总和,当 sum >= x 时,我们要根据题目条件来保存 prev 和 cur 的值; 2)当 sum >= x 时,我们记录完 prev 和 cur 的值的之后,sum -= arr[ prev ],prev++ ,往后走,只要满足条件 sum >= x 我们就要记录

By Ne0inhk
Flutter 三方库 music_notes 跨栈极客音乐教学底层核心算法鸿蒙化适配解析:高保真重组异度乐理参数体系精准切割动态音程和弦算子推进数字化编曲演进-适配鸿蒙 HarmonyOS ohos

Flutter 三方库 music_notes 跨栈极客音乐教学底层核心算法鸿蒙化适配解析:高保真重组异度乐理参数体系精准切割动态音程和弦算子推进数字化编曲演进-适配鸿蒙 HarmonyOS ohos

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 music_notes 跨栈极客音乐教学底层核心算法鸿蒙化适配解析:高保真重组异度乐理参数体系精准切割动态音程和弦算子推进数字化编曲演进大盘 在鸿蒙平台的数字音乐创作、智慧钢琴教学或音频编辑工具的开发中,如何通过代码精确表达音高(Pitch)、调性(Key)与和弦(Chord)逻辑?music_notes 库是一套专为乐理计算设计的 Dart 核心工具库。本文将详解该库在 OpenHarmony 上的适配要点。 前言 什么是 music_notes?它不仅能简单地表示音符。还内置了复杂的半音/全音步长运算、调号(Key Signatures)转换以及音程(Intervals)关系判定。在鸿蒙操作系统强调的“全场景智慧办公”和“极致影音娱乐”背景下,利用 music_notes 库可以确保你的应用在面对复杂的乐谱解析、

By Ne0inhk
【开源工具】深度解析:Python+PyQt5打造微信多开神器 - 原理剖析与完整实现

【开源工具】深度解析:Python+PyQt5打造微信多开神器 - 原理剖析与完整实现

🚀【开源工具】深度解析:Python+PyQt5打造微信多开神器 - 原理剖析与完整实现 🌈 个人主页:创客白泽 - ZEEKLOG博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,热情源自每一个灵感闪现的夜晚。愿以开源之火,点亮前行之路。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多人哦 📖 前言 微信作为国民级IM工具,但官方始终未提供多开功能。本文将深入讲解如何利用Python+PyQt5开发跨平台微信多开助手,突破官方限制。不同于网上简单的多开脚本,本项目实现了: * 自动化路径探测 * 可视化操作界面 * 多模式多开机制 * 完整的异常处理体系 🎯 一、功能全景 1.1 核心功能矩阵 功能模块技术实现亮点智能路径探测注册表查询+全盘扫描支持99%的安装场景可视化交互PyQt5自定义UI组件媲美原生应用的体验多开引擎子进程管理+沙盒隔离支持三种多开模式配置持久化QSettings序列化自动记忆用户偏好 1.2 技术栈深度 图形界面PyQt5多线程搜索跨进程通信注册表操作子进程管理

By Ne0inhk