【算法通关指南:数据结构与算法篇】二叉树相关算法题:1.二叉树深度 2.求先序排列

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

文章目录

前言

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

一、二叉树深度

2.1题目

链接:二叉树深度

在这里插入图片描述

2.2 算法原理

二叉树的高度 = 1 + max(左子树的高度,右子树的高度);因此,可以递归解决。

2.3代码

#include <iostream> using namespace std; const int N =1e6+10; int l[N], r[N]; int dfs(int root){if(!root)return0;returnmax(dfs(l[root]),dfs(r[root]))+1;} int main(){ int n; cin >> n;for(int i =1; i <= n; i++) cin >> l[i]>> r[i]; cout <<dfs(1)<< endl;return0;}

二、 求先序排列

3.1题目

链接:求先序排列

在这里插入图片描述

3.2 算法原理

在这里插入图片描述


处理「左右字树」的方式与处理「原始序列」的方式一致,这样我们就可以用「递归」的方式求出先序序列
注: 如何进行区间定位

在这里插入图片描述

3.3代码

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

总结与每日励志

✨本次我们练习了二叉树深度和先序排列两道基础题,核心均运用递归思想:前者通过递归求左右子树高度取最大值加一得出结果,后者利用中序与后序序列定位根节点,递归处理左右子树完成先序输出。算法学习没有捷径,每一道题的积累都是成长的阶梯。永远相信美好的事情即将发生,坚持刷题、沉淀思路,终会突破瓶颈,在算法之路上稳步前行,不负每一份努力与热爱!

在这里插入图片描述

Read more

【C++笔记】STL详解:list容器的实现

【C++笔记】STL详解:list容器的实现

前言:         在学习了list容器的基本使用的前提下,本文将重点分析容器类的常用接口及其应用实现。          一、list的成员变量          如图所示,list的底层数据结构为:双向链表          通过下面三个结构体和类实现list:          ①结构体 struct list_node :用来存储链表结点的信息。              ②结构体 struct list_iterator:用来封装结点指针,使其能够通过重载运算符访问结点。          ③类 class list :用来实现双向链表的各种增删查改操作          1.1 结构体list_node          template<class T> struct list_node { //对struct list_node重命名为 Node typedef list_node<T> Node; //链表存储的节点值 T _data;

By Ne0inhk
【Linux】Linux 进程通信:System V 共享内存(最快方案)C++ 封装实战 + 通信案例,4 类经典 Bug 快速修复

【Linux】Linux 进程通信:System V 共享内存(最快方案)C++ 封装实战 + 通信案例,4 类经典 Bug 快速修复

前言:欢迎各位光临本博客,这里小编带你直接手撕**,文章并不复杂,愿诸君**耐其心性,忘却杂尘,道有所长!!!! IF’Maxue:个人主页  🔥 个人专栏: 《C语言》 《C++深度学习》 《Linux》 《数据结构》 《数学建模》 ⛺️生活是默默的坚持,毅力是永久的享受。不破不立! 文章目录 * 二、System V共享内存:最快的进程间通信 * 1. System V共享内存核心概念 * 2. System V共享内存原理 * (1)进程虚拟地址空间结构 * (2)共享内存映射过程 * (3)共享内存的管理:先描述,再组织 * 3. System V共享内存核心接口 * (1)生成唯一Key:ftok * (2)创建/获取共享内存:shmget

By Ne0inhk
【Linux/C++多进程篇(二) 】万字解析从“传纸条”到“建仓库”:一文读懂linux系统编程之进程间通信 (IPC)

【Linux/C++多进程篇(二) 】万字解析从“传纸条”到“建仓库”:一文读懂linux系统编程之进程间通信 (IPC)

⭐️在这个怀疑的年代,我们依然需要信仰。 个人主页:YYYing. ⭐️Linux/C++进阶系列专栏:【从零开始的linux/c++进阶编程】 系列上期内容:【Linux/C++多进程篇(一) 】C/C++ 程序中神奇的“分身术” 系列下期内容:【Linux/C++多线程篇(一) 】多线程编程入门 目录 前言: 进程间通信(IPC) 一、进程间通信的基础概念 二、内核提供的通信方式 2.1、无名管道  📖 无名管道的API  📖 代码案例 2.2、有名管道  📖 有名管道的API  📖 代码案例 2.3、管道特点 2.4、信号  📖 信号相关概念

By Ne0inhk
【Trae】如何使用Trae编译C++(附带MinGW)

【Trae】如何使用Trae编译C++(附带MinGW)

结果 先看结果 这是一道回文串题目,F5编译,控制台输入输出。 下载 * 下载Trae编译器,直接去官网下:https://www.trae.cn/ * 下载VSCode编译器,这个相信用Trae的各位都不陌生。https://code.visualstudio.com/ * 查看你的C盘,C:\Users\Administrator\.vscode\extensions路径下是否有extensions.json文件,如果没有,请将VSCode卸载后重装。 安装插件 在VSCode里安装“C/C++”插件。 这里需要在VSCode里安装的原因是C/C++插件在Trae里是搜不到的。 再次查看C:\Users\Administrator\.vscode\extensions路径,看看插件是否安装成功,且extensions.json文件里有这个插件。 关闭VSCode,打开Trae。 点击右上角头像-IDE设置 选择“从VSCode导入”,等待它导入插件,导入完成后点击查看一下,

By Ne0inhk