Day97 | 灵神 | 二叉树 对称二叉树
Day97 | 灵神 | 二叉树 对称二叉树101.对称二叉树101. 对称二叉树 - 力扣(LeetCode) 思路: 和上一题的区别就是在p和q值相同的时候递归遍历的下一棵子树不同 上一题是左子树和左子树,右子树和右子树对比 这一题的对称就是左子树的左子树和右子树的右子树,左子树的右子树和右子树的左子树对比 不同的情况是 1.p为空q不为空 2.p不为空q为空 3.pq值不同 相同的情况是 pq均为空 注:pq值相同不能说明是true,还要看pq的左右子树 完整代码: 123456789101112131415161718192021class Solution {public: bool is(TreeNode *l,TreeNode *r) { if(l==nullptr&&r!=nullptr) return false; else if(l!=nullptr&&r==nullptr) return false; ...
Day96 | 灵神 | 二叉树 相同的树
Day96 | 灵神 | 二叉树 相同的树100.相同的树100. 相同的树 - 力扣(LeetCode) 思路: 就是个easy题没啥好说的,就是遍历就行 不同的情况是 1.p为空q不为空 2.p不为空q为空 3.pq值不同 相同的情况是 pq均为空 注:pq值相同不能说明是true,还要看pq的左右子树 完整代码: 12345678910111213141516class Solution {public: bool isSameTree(TreeNode* p, TreeNode* q) { if(p==nullptr&&q!=nullptr) return false; else if(p!=nullptr&&q==nullptr) return false; else if(p==nullptr&&q==nullptr) return true; else...
Day95 | 灵神 | 二叉树 二叉树的垂序遍历
Day95 | 灵神 | 二叉树 二叉树的垂序遍历987.二叉树的垂序遍历987. 二叉树的垂序遍历 - 力扣(LeetCode) 思路: 这道题是个hard题,emm感觉是个mid题 首先这道题难点不在递归,因为递归完成的任务只是标记每个节点的row和col而已 难在对数据的处理,其实也不难,就是把所有顶点的值记录到三元组里面 第一个元素col,第二个元素row,第三个元素节点的值,按照这三个元素排序就行 按照第一个元素大小排,一样的话看第二个,还一样的话看第三个,最后输出出来就行 完整代码: 笔者用的是map<int,vector<pair<int,int>>> 第一个元素大小的排序在插入map时已经完成,因为map底层是红黑树 那就只需要对col相同的vector<pair<int,int>>排序就好了,直接使用sort sort排序pair就是先看第一个元素大小,一样的话看第二个元素 1234567891011121314151617181920212223242526class Solution...
Day94 | 灵神 | 二叉树 统计二叉树中好点的数目
Day94 | 灵神 | 二叉树 统计二叉树中好点的数目1448.统计二叉树中好点的数目1448. 统计二叉树中好节点的数目 - 力扣(LeetCode) 思路: 1.递归函数含义 含义就是以t为根结点的子树中有多少个好点 这个一般就和题目要求的东西是一样的 2.参数以及返回值 1int tra(TreeNode* t,int max) 传入的是根节点以及已经走过的路径的最大值 返回值就是以t为根结点的子树中有多少个好点 3.终止条件 12if(t==nullptr) return 0; 如果是空节点那肯定不可能有好点了 4.本层逻辑 显然,以t为根结点的好点数量就等于左子树好点数和右子树好点数之和,但是这里还要看当前结点t是否也是好点,是的话那就更新最大值,在左右子树之和基础上再+1,不是的话就不加 123456if(t->val>=max) { max=t->val; return tra(t->left,max)+tra(t->right,max)+1; } ...
hexo如何让一个博客出现在两个目录或者子级目录呢?如何编写对应的Front-matter?
hexo如何让一个博客出现在两个目录或者子级目录呢?如何编写对应的Front-matter?具体格式在对应文章的front-matter,按照如下格式编写 1.有层级的123456categories: - [分类A, 子分类A1] - 分类Btags: - 标签1 - 标签2 分类的层次性:Hexo 的分类具有层级结构,而标签是平铺的。 示例中的文章将同时属于: 分类A → 子分类A1(层级结构) 分类B(独立分类) 2.并列的A和B是并列的,也就是让这一篇博客出现在A和B两个分类中 123categories: - [分类A] - [分类B] 具体场景示例1. 文章同时属于两个独立分类12345678910---title: 测试文章date: 2025-04-17categories: - [技术] - [生活]tags: - Hexo - 博客技巧--- 结果:文章会同时出现在「技术」和「生活」两个分类目录中 2. 文章属于多层级分类123456---title: 深度学习教程categories: - [AI, 深度学习] ...
关于C++使用lambda表达式写递归函数时的踩坑记录
关于C++使用lambda表达式写递归函数时的踩坑记录是笔者在写129. 求根节点到叶节点数字之和 - 力扣(LeetCode)这道题时遇到的 问题描述以下代码是跑不通的,在第14行即dfs调用时会发现dfs未定义 1234567891011121314151617181920class Solution {public: int sumNumbers(TreeNode* root) { int ans = 0; auto dfs = [&](TreeNode* node, int x) -> void { if (node == nullptr) { return; } x = x * 10 + node->val; if (node->left == node->right) { // node 是叶子节点 ...
Day93 | 灵神 | 二叉树 求根节点到叶结点数字之和
Day93 | 灵神 | 二叉树 求根节点到叶结点数字之和129.求根节点到叶结点数字之和129. 求根节点到叶节点数字之和 - 力扣(LeetCode) 先序遍历思路:这道题和昨天那道Day92 | 灵神 | 二叉树 路径总和-CSDN博客的区别就是我们要在走这些路径的时候要想办法把当前正在走的路径的数字给算出来 然后昨天那道题是在叶节点处把flag改为true,证明我们找到了一条路径满足条件 今天这个题是在叶子结点时,把你加好的这条路径的和返回给上一级递归函数 而我们如何在路径图中计算数字呢? 设一开始是x=0,那么每经过一个结点就让x*10加上当前结点的值就好了 然后在叶子结点处进行返回就好了 先看先序遍历(dfs)的代码吧可以先看看比较差但是能跑通的笔者的代码 我是用字符串把路径数字都存起来然后在叶子结点处转化为整数再加起来,感觉这个方法笨笨的对比灵神的 12345678910111213141516171819202122232425262728293031323334353637383940class Solution {public: ...
Day92 | 灵神 | 二叉树 路径总和
Day92 | 灵神 | 二叉树 路径总和112.路径总和112. 路径总和 - 力扣(LeetCode) 思路: 1.递归函数意义 如果在根节点为t的树中可以找到长度为target的路径就返回true,找不到就返回false 2.参数和返回值 1bool tra(TreeNode *t,int target) 参数中的target在传入之前会先减掉当前结点的值作为给下一个结点传入的值 如果在根节点为t的树中可以找到长度为target的路径就返回true,找不到就返回false 3.终止条件(边界条件) 如果我们碰到了空节点,那就是false,说明没找到路径 12if(t==nullptr) return false; 4.本层逻辑(非边界条件) 减去本层节点值之后判断是否是我们要找的路径 即在叶子结点,并且target也减到0了 然后递归遍历左右子树,不管哪边找到了我们都可以返回true 123456target-=t->val; if(t->left==nullptr&&t->right==nullptr) ...
Day91 | 灵神 | 二叉树 二叉树的最小深度
Day91 | 灵神 | 二叉树 二叉树的最小深度111.二叉树的最小深度111. 二叉树的最小深度 - 力扣(LeetCode) 后序遍历思路:1.递归函数意义 求得以传入参数t为根节点的树的最小深度 2.参数和返回值 1int get_depth(TreeNode *t) 返回值就是以t为根结点的树的最小深度 3.终止条件(边界条件) 如果我们碰到了空节点,那么它的深度肯定就是0了 12if(t==nullptr) return 0; 4.本层逻辑(非边界条件) 如果 node 是空节点,由于没有节点,返回 0。 如果 node 没有右儿子,那么深度就是左子树的深度加一,即 dfs(node)=dfs(node.left)+1。 如果 node 没有左儿子,那么深度就是右子树的深度加一,即 dfs(node)=dfs(node.right)+1。 如果 node...
Day90 | 灵神 | 二叉树 做题方法 二叉树的最大深度
Day90 | 灵神 | 二叉树 做题方法 二叉树的最大深度灵神的做题方法首先 类似于高中的整体法,将左右子树分别看为一个整体 其次 再次 最后 边界条件和非边界条件怎么算也得想清楚 并且在写代码之前还要想清楚为什么这样做是对的,可以用数学归纳法来说明 边界条件就类似于图中的1,而非边界条件就类似于图中的2 笔者觉得挺好的做题方法1.先想明白递归函数的含义,比如在下面的题中就是求以传入参数t为根节点的树的最大深度 2.想明白递归函数参数和返回值 3.想清楚递归函数结束条件,对应上面的边界条件 4.想清楚递归函数本层逻辑,对应上面的非边界条件 104.二叉树的最大深度104. 二叉树的最大深度 - 力扣(LeetCode) 思路: 1.递归函数意义 求以传入参数t为根节点的树的最大深度 2.参数和返回值 1int get_depth(TreeNode *t) 返回值就是以t为根结点的树的最大深度 3.终止条件(边界条件) 如果我们碰到了空节点,那么它的深度肯定就是0了 12if(t==nullptr) return...