【算法通关指南:数据结构与算法篇】二叉树相关算法题: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

Java 中间件:Kafka 分区策略(自定义分区器实现负载均衡)

Java 中间件:Kafka 分区策略(自定义分区器实现负载均衡)

👋 大家好,欢迎来到我的技术博客! 📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。 🎯 本文将围绕Java中间件这个话题展开,希望能为你带来一些启发或实用的参考。 🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获! 文章目录 * Java 中间件:Kafka 分区策略(自定义分区器实现负载均衡) 🚀 * 1. Kafka 分区机制基础 🧱 * 1.1 什么是分区? * 1.2 默认分区策略 * 2. 为什么需要自定义分区器?🎯 * 场景一:避免热点分区 🔥 * 场景二:按业务维度分片 🗂️ * 场景三:动态负载感知 📊 * 3. Kafka 分区器接口详解 🛠️ * 核心方法说明: * 4. 实战:实现一个简单的自定义分区器 💻 * 4.1 项目依赖 * 4.2 自定义分区器代码 * 4.3 配置生产者使用自定义分区器

By Ne0inhk
从兼容到超越:KingbaseES 突破 MySQL 权限局限,以权限隔离筑牢数据安全防线

从兼容到超越:KingbaseES 突破 MySQL 权限局限,以权限隔离筑牢数据安全防线

前言 对于数据库安全而言,用户权限隔离是守护数据访问边界、杜绝未授权操作的核心能力。KingbaseES 作为面向企业的专业数据库产品,一方面通过兼容 MySQL 核心语法简化迁移流程,另一方面突破基础兼容局限,完成了向“功能增强”阶段的升级。依靠用户权限隔离功能为普通用户提供表、函数、视图、字段等数据库对象的精细化访问管控,以权限隔离筑牢数据安全防线。 文章目录 * 前言 * 一、用户权限隔离核心概述 * 1.1 功能定位与价值 * 1.2 核心语法:启用与禁用 * 二、功能实现原理 * 2.1 底层依赖:行级安全策略(RLS) * 2.2 关键技术组件 * 2.2.1核 心结构体与列表 * 2.2.2 权限判断函数 * 三、用户权限隔离实战操作 * 3.

By Ne0inhk
离线部署指南:本地下载MySQL 8.0.37并上传服务器Centos7.9安装

离线部署指南:本地下载MySQL 8.0.37并上传服务器Centos7.9安装

离线部署指南:本地下载MySQL 8.0.37并上传服务器安装 在生产环境中,我们常常会遇到服务器无法连接外网的情况,这时候就需要离线安装MySQL。本文详细介绍如何从官网下载MySQL 8.0.37,上传到CentOS 7.9服务器并进行完整安装配置。 环境准备 * 操作系统: CentOS 7.9 * MySQL版本: 8.0.37 * 安装方式: RPM包离线安装 第一步:下载MySQL安装包 访问MySQL官网 1. 打开 MySQL Community Server下载页面 2. 选择版本信息: * Operating System: Linux - Generic * OS Version: Linux - Generic (glibc 2.12) 下载类型:

By Ne0inhk
Spring Cloud之服务入口Gateway之自定义过滤器

Spring Cloud之服务入口Gateway之自定义过滤器

目录 过滤器执行顺序 自定义过滤器 自定义GatewayFilter 定义GatewayFilter 配置过滤器 启动服务并访问 自定义GlobalFilter 定义GlobalFilter 启动服务并访问 服务部署 过滤器执行顺序 如果⼀个项⽬中, 既有GatewayFilter, ⼜有 GlobalFilter时, 执⾏的先后顺序是什么呢? 请求路由后, ⽹关会把当前项⽬中的GatewayFilter和GlobalFilter合并到⼀个过滤器链(集合)中, 并进⾏排序, 依次执⾏过滤器. 每⼀个过滤器都必须指定⼀个int类型的order值, 默认值为0, 表⽰该过滤的优先级. order值越⼩,优先级越⾼,执⾏顺序越靠前. • Filter通过实现Order接⼝或者添加@Order注解来指定order值. • Spring Cloud Gateway提供的Filter由Spring指定. ⽤⼾也可以⾃定义Filter, 由⽤⼾指定.

By Ne0inhk