Day104 | 灵神 | 二叉树 出现次数最多的子树元素和
Day104 | 灵神 | 二叉树 出现次数最多的子树元素和508.出现次数最多的子树元素和508. 出现次数最多的子树元素和 - 力扣(LeetCode) 思路: 思路就是遍历一遍二叉树然后用map给它的频率都记录下来,再对频率排序,把最大的输出到一个vector里面返回就是了 注意:C++的map不能直接对sort使用lambda实现对value的排序,需要先把map转化为vector<pair>才可以 完整代码: 123456789101112131415161718192021222324252627282930class Solution {public: map<int,int> q; int maxCnt=0; //记录频率 int tra(TreeNode *t) { if(t==nullptr) return 0; int sum=tra(t->left)+tra(t->right)+t->val; ...
Day103 | 灵神 | 二叉树 计算布尔二叉树的值
Day103 | 灵神 | 二叉树 计算布尔二叉树的值2331.计算布尔二叉树的值2331. 计算布尔二叉树的值 - 力扣(LeetCode) 思路: 本题思路很直接,就是直接写,分情况讨论就好 完整代码: 1234567891011121314151617181920212223242526class Solution {public: bool evaluateTree(TreeNode* root) { if(root==nullptr) return false; else if(root->left==nullptr) return root->val; else if(root->val==2) return evaluateTree(root->left)||evaluateTree(root->right); else return...
Day102 | 灵神 | 二叉树 合并二叉树
Day102 | 灵神 | 二叉树 合并二叉树617.合并二叉树617. 合并二叉树 - 力扣(LeetCode) 思路: 就是新建一个结点,然后找到左右子树给接上去把该节点返回就是了 接子树的时候有下面几种情况 1.如果root1当前结点不为空,而root2为空的话,那就返回root1作为上层递归函数的结点t的左子树或者右子树 2.如果root2当前结点不为空,而root1为空的话,那就返回root2作为上层递归函数的结点t的左子树或者右子树 3.如果root1当前结点为空,而root2也为空的话,那就返回nullptr 4.如果root1当前结点不为空,而root2也不为空的话,那就把这两个结点的val相加作为当前结点t的val然后返回即可 完整代码: 12345678910111213141516171819202122232425262728293031class Solution {public: TreeNode* tra(TreeNode *t1,TreeNode *t2,TreeNode *t) { ...
26考研 | 王道 | 数据结构 | 数据结构笔记博客总结
26考研 | 王道 | 数据结构笔记博客总结笔者博客网站 分类: 数据结构 | Darlingの妙妙屋 26考研 | 王道 | 数据结构 | 第一章 数据结构绪论 | Darlingの妙妙屋 26考研 | 王道 | 数据结构 | 第二章 线性表 | Darlingの妙妙屋 26考研 | 王道 | 数据结构 | 第三章 栈和队列 | Darlingの妙妙屋 26考研 | 王道 | 数据结构 | 第四章 串 | Darlingの妙妙屋 26考研 | 王道 | 数据结构 | 第五章 树 | Darlingの妙妙屋 26考研 | 王道 | 数据结构 | 第六章 图 | Darlingの妙妙屋 26考研 | 王道 | 数据结构 | 第七章 查找 | Darlingの妙妙屋 26考研 | 王道 | 数据结构 | 第八章 排序 | Darlingの妙妙屋 CSDN链接 26考研 | 王道 | 数据结构 | 第一章 数据结构绪论_数据结构 王道计算机教育-CSDN博客 26考研 | 王道 |数据结构 | 第二章 线性表-CSDN博客 26考研 | 王道 | 数据结构 | 第三章...
26考研 | 王道 | 数据结构 | 第八章 排序
第八章 排序8.0 关于链表能用于链表的: 直接插入排序,冒泡排序,简单选择排序,归并排序 相关题目: 147. 对链表进行插入排序 - 力扣(LeetCode) 148. 排序链表 - 力扣(LeetCode) 148正解是归并排序,但是可以测试写的冒泡直接插入和简单选择排序是否正确 笔者题解: Day109 | 148.排序链表 | 归并排序 | Darlingの妙妙屋 Day108 | 灵神 | 合并两个有序链表 | Darlingの妙妙屋 Day107 | 147.对链表进行插入排序 | 简单选择、冒泡、直接插入 | Darlingの妙妙屋 Day107 | 147.对链表进行插入排序 | 简单选择、冒泡、直接插入-CSDN博客 Day108 | 灵神 | 合并两个有序链表-CSDN博客 Day109 | 灵神 | 148.排序链表 | 归并排序-CSDN博客 8.1 排序的基本概念 排序算法的评价指标:时间复杂度、空间复杂度、稳定性 8.2 插入排序 8.2.1...
Day101 | 灵神 | 二叉树 翻转等价二叉树
Day101 | 灵神 | 二叉树 翻转等价二叉树951.翻转等价二叉树951. 翻转等价二叉树 - 力扣(LeetCode) 思路: 一开始笔者的思路就是判断完当前结点相不相等以后再去判断左右子树相不相等,不相等的话用swap翻转之后再次比较,这样太麻烦了,而且写的时候难免出错 笔者就去评论区找大佬了 大佬的思路是:反正是有限次数的翻转,那么只会有两种情况 情况1:不需要翻转,也就是root1的左子树和root2的左子树相同,右子树和右子树相同 情况2:需要翻转,也就是没有翻转之前root1的左子树和root2的右子树相同,root1的右子树和root2的左子树相同 那我还翻转什么了,直接把这两种情况都递归一下,第一次比较左左和右右,第二次比较左右和右左,只要有一次可以比较成功那就是可以翻转,根本不用什么swap 完整代码: 笔者代码:觉得看着复杂可以看下面的等价代码 1234567891011121314class Solution {public: bool flipEquiv(TreeNode* root1, TreeNode* root2)...
26考研 | 王道 | 数据结构 | 第七章 查找
第七章 查找7.1 查找概念 **查找:**在数据集合中寻找满足某种条件的数据元素的过程称为查找。 **查找表(查找结构):**用于查找的数据集合称为查找表,它由同一类型的数据元素 (或记录)组成。 **关键字:**数据元素中唯一标识该元素的某个数据项的值,使用基于关键字的查找,查找结果应该是唯一的。 对查找表的常⻅操作: 查找符合条件的数据元素 插⼊、删除某个数据元素 只需要进行操作1的是静态查找表 1和2都需要进行的是动态查找表 **查找长度:**在查找运算中,需要对比关键字的次数称为查找长度。 平均查找长度(ASL,Average Search Length): 所有查找过程中进行关键字的比较次数的平均值。 ASL的数量级反应了查找算法时间复杂度 7.2 顺序查找 **顺序查找,**又叫“线性查找”,通常用于线性表算法。 **思想:**从头到尾遍历 代码实现: 123456789101112typedef struct{ //查找表的数据结构(顺序表) ElemType *elem; //动态数组基址 ...
Day100 | 灵神 | 二叉树 单值二叉树
Day100 | 灵神 | 二叉树 单值二叉树965.单值二叉树965. 单值二叉树 - 力扣(LeetCode) 思路: 笔者的思路是后序遍历传入两参数,一个是节点另一个是单值的值,只要一样就是true,不一样就是false,缺点是如果当然节点已经不满足条件了,还是会处理完左右子树再来处理根节点 也可以先序遍历,就是先判断是不是是不是val,是的话就不处理下面的左右子树了 完整代码: 12345678910111213141516class Solution {public: bool tra(TreeNode *t,int val) { if(t==nullptr) return true; bool l=tra(t->left,val); bool r=tra(t->right,val); if(val!=t->val) return false; return l&&r; } ...
Day99 | 灵神 | 二叉树 二叉树的右视图
Day99 | 灵神 | 二叉树 二叉树的右视图199.二叉树的右视图199. 二叉树的右视图 - 力扣(LeetCode) 思路: 笔者的思路并不敏捷,所以第一时间只能想到层序遍历,然后把每层的最后一个给放到数组里面去 灵神的思路: 按照根右左的顺序遍历,只要当前结点的深度是第一次遍历到,那必然是最右侧的节点 找左视图的话那肯定就是根左右的顺序遍历了 完整代码: 1234567891011121314151617181920212223242526class Solution {public: vector<int> rightSideView(TreeNode* root) { vector<int> res; if(root==nullptr) return res; queue<TreeNode*> q; q.push(root); while(!q.empty()) { ...
Day98 | 灵神 | 二叉树 平衡二叉树
Day98 | 灵神 | 二叉树 平衡二叉树110.平衡二叉树110. 平衡二叉树 - 力扣(LeetCode) 思路: 笔者的思路: 就是左右子树高度差不超过1 那就算左子树和右子树高度然后相减,如果超过1就把标记flag变为false即可 灵神的思路: 灵神是失败就返回-1而不使用flag标记 如果最后返回的结果不是-1,那就是true,是的话就是false 完整代码: 笔者的 123456789101112131415161718class Solution {public: bool flag=true; int get_depth(TreeNode* t) { if(t==nullptr) return 0; int l=get_depth(t->left)+1; int r=get_depth(t->right)+1; if(abs(l-r)>1) flag=false; return...