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

数据结构-单链表

数据结构-单链表

单链表 * 概念与结构 * 结点 * 链表的性质 * 链表的打印 * 实现单链表 * 头文件 * 源文件 * 单链表的打印 * 单链表申请新节点内存 * 尾插 * 头插 * 尾删 * 头删 * 查找 * 在指定位置之前插入数据 * 在指定位置之后插入数据 * 删除pos结点 * 删除pos之后的结点 * 销毁链表 * 链表的分类 * 代码地址 概念与结构 概念:链表是⼀种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 逻辑结构:线性 物理结构(存储结构):不一定是线性的 链表就类似一个火车,车头是哨兵位(可有可无),车厢是节点 * 将火车里的某节车厢去掉或加上,不会影响其他车厢,每节车厢都是独立存在的。 在链表⾥,每节“车厢”是什么样的呢? \color{red}{在链表⾥,每节“车厢”是什么样的呢?

By Ne0inhk
【数据结构】排序详解:从快速排序分区逻辑,到携手冒泡排序的算法效率深度评测

【数据结构】排序详解:从快速排序分区逻辑,到携手冒泡排序的算法效率深度评测

🔥@晨非辰Tong: 个人主页 👀专栏:《C语言》、《数据结构与算法入门指南》 💪学习阶段:C语言、数据结构与算法初学者 ⏳“人理解迭代,神理解递归。” 文章目录 * 引言 * 一、介绍交换排序 * 二、高效交换--快速排序“:递归版 * 2.1 介绍:创造背景以及基本思想 * 2.2 基于二叉树结构的主体框架 * 三、找基准值key的三种==递归版==实战方法 * 3.1 快排核心构成:寻找key的算法之"hoare"版本 * 3.3.1 画图理解算法 * 3.3.2 代码实战 * 3.1.3 ==**代码分析**== * 3.2

By Ne0inhk
【优选算法必刷100题】第019~20题(二分查找算法):x 的平方根、搜索插入位置

【优选算法必刷100题】第019~20题(二分查找算法):x 的平方根、搜索插入位置

🔥艾莉丝努力练剑:个人主页 ❄专栏传送门:《C语言》、《数据结构与算法》、C/C++干货分享&学习过程记录、Linux操作系统编程详解、笔试/面试常见算法:从基础到进阶 ⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平 🎬艾莉丝的简介: 🎬艾莉丝的算法专栏简介: 目录 019  x 的平方根 1.1  思路一:暴力解法 1.1.1  算法思路 1.1.2  算法实现 1.2  思路二:二分查找 1.2.1  算法思路 1.2.2  算法实现 1.3

By Ne0inhk
dfs专题8——子集

dfs专题8——子集

🔥近津薪荼: [个人主页]🎬个人专栏: 《近津薪荼的算法日迹》《Linux操作系统及网络基础知识分享》《c++基础知识详解》《c语言基础知识详解》✨不要物化,矮化,弱化,钝化自己,保持锋芒,不要停止学习这个世界上只有两个人真正在注意着你八岁的你,和八十岁的你,他们此刻正在注视着你,一个希望你 勇敢开始,一个希望你 不留遗憾 1.上期参考代码 classSolution{ vector<vector<int>>ret; vector<int>path; vector<bool>check=vector<bool>(6,false);public: vector<

By Ne0inhk