随笔分类 -  代码随想录二刷

为了加深自己对代码的印象而成 方便自己以后忘记方法论时回头可以找得到当时我的思想
摘要:✅做题思路or感想: 递归参数:一个遍历节点,一个比较节点值的val 递归中止条件:cur == nullptr为止,即是节点遍历到了头 单层递归逻辑:比较节点值和目标值 如果相等,则给预设的节点赋值 如果大了,就往左节点走 如果小了,就往右节点走 最后在主函数返回预设节点 class Soluti 阅读全文
posted @ 2022-03-29 20:46 北原春希 阅读(31) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想: 有返回值的递归果然还是特别不熟练啊 递归参数:因为要同时遍历两棵树,所以要同时传入两棵树的节点! 递归中止条件:当其中一个节点无的时候,就返还另一个节点(两个节点都无,就返回空节点) 递归单层逻辑:两个节点的值相加(因为前面中止条件决定了这里的两个节点都必定不是空节点) 有返回 阅读全文
posted @ 2022-03-29 20:32 北原春希 阅读(30) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想: 根据前序遍历找根节点 由前序遍历根节点的值来切割中序数组,再由中序数组切割前序数组,最终切割成左子树的中序,前序数组和右子树的中序,前序数组。 递归造根节点的左子树和右子树 class Solution { public: TreeNode* buildTree(vector< 阅读全文
posted @ 2022-03-29 20:19 北原春希 阅读(24) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想: 这道题要从前中后序遍历的特点入手。因为后序遍历的最后一个节点必是根节点,故从次开始 如果数组长度为0,则说明是空节点 如果数组不为空,那么后序数组的最后一个元素作为节点元素 找到后序数组的最后一个元素在中序数组中的位置,作为切割位置 利用切割位置把中,后序数组切成左子树的中,后 阅读全文
posted @ 2022-03-28 22:59 北原春希 阅读(25) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想: 也是遍历一遍二叉树,判断路径总和和是否是叶子节点,要注意的是这里还需要加一个vector来记录路径 class Solution { public: vector<vector<int>>result; void dfs(TreeNode* cur, vector<int>ve 阅读全文
posted @ 2022-03-28 22:53 北原春希 阅读(26) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想: 也是遍历一遍二叉树的路径,每次遍历一个节点就把targeSum减去对应的节点值,如果最后是叶子节点并且targeSum为0,则符合条件 class Solution { public: bool flag = false; void dfs(TreeNode* cur, int 阅读全文
posted @ 2022-03-28 22:50 北原春希 阅读(27) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想: 直接遍历二叉树,然后用一个字符串记录一条遍历路径,然后遍历到叶子节点的时候就把字符串加入result里就好了 class Solution { public: vector<string> result; //存答案 void dfs(TreeNode* cur, string 阅读全文
posted @ 2022-03-28 22:47 北原春希 阅读(31) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想: 用递归后序遍历二叉树,然后从底部开始记录高度为0,然后往上加1。 每一次操作节点的时候比较左右子树的高度,如果有一棵树不符合条件,则直接把-1返回到最顶的根节点 class Solution { public: int getDepth(TreeNode* cur) { if 阅读全文
posted @ 2022-03-28 22:44 北原春希 阅读(23) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想: 直接递归到叶子节点,然后更新最小值就好了 这不是和上一题一模一样吗 class Solution { public: int result = 99999; void dfs(TreeNode* root, int sum) { if (root->left == nullpt 阅读全文
posted @ 2022-03-27 10:33 北原春希 阅读(24) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想: 直接递归到叶子节点,然后更新最大值就好了 class Solution { public: int result = 1; void dfs(TreeNode* cur, int sum) { if (cur->left == nullptr && cur->right == 阅读全文
posted @ 2022-03-27 10:24 北原春希 阅读(24) 评论(0) 推荐(0) 编辑
摘要:✅做题思路or感想: 这题是要同时遍历左子树和右子树 遍历左子树的外侧和右子树的外侧 遍历左子树的内侧和右子树的内侧 最后判读是否外侧和内侧都是对称的 class Solution { public: bool dfs(TreeNode* left, TreeNode* right) { //处理左 阅读全文
posted @ 2022-03-27 10:15 北原春希 阅读(20) 评论(0) 推荐(0) 编辑
摘要:做题思路or感想: 遍历一遍二叉树,然后将遍历节点的左右节点互换就好了 class Solution { public: void dfs(TreeNode* root) { if (root == nullptr)return; swap(root->left, root->right); //交 阅读全文
posted @ 2022-03-27 09:59 北原春希 阅读(31) 评论(0) 推荐(0) 编辑
摘要:二叉树的层序遍历(bfs) ✅做题思路or感想: 利用队列来实现层序遍历 当明确每一层直接的元素不用区别对待时,其实代码中的size可以不写,但在这里要根据每一层来进行分组,所以要写size 当队列为空时,结束bfs class Solution { public: vector<vector<in 阅读全文
posted @ 2022-03-26 14:03 北原春希 阅读(19) 评论(0) 推荐(0) 编辑
摘要:二叉树的遍历 前序遍历 遍历顺序:中,左,右 代码实现: void dfs(TreeNode* root) { if (root != nullptr)result.push_back(root->val); if (root->left != nullptr)dfs(root->left); if 阅读全文
posted @ 2022-03-26 13:48 北原春希 阅读(32) 评论(0) 推荐(0) 编辑
摘要:✔做题思路or感想: 先说感想:二刷的我又对这道题写了一个小时,可恶 这道题用单调栈比较好理解 用单调栈来储存下标!用下标来计算宽度,用height[i]来算高度 要保持单调栈递减的状态,符合题意 当height[i]=height[st.top()],则要替换掉栈顶的元素,因为这里是需要用最右的柱 阅读全文
posted @ 2022-03-25 21:01 北原春希 阅读(58) 评论(0) 推荐(0) 编辑
摘要:✔做题思路or感想: 单调队列可以通过维护单调性去解决区间内最大或最小的问题 一般自己造新的DIY队列时,可以用双向队列,更方便 这一道题的思路是用单调队列维护滑动区间内的最大值,使得单调队列的队首就是区间内的最大值 为了实现这一点,可以这样来设计: pop:如果窗口移除的元素value等于单调队列 阅读全文
posted @ 2022-03-25 18:59 北原春希 阅读(25) 评论(0) 推荐(0) 编辑
摘要:✔做题思路or感想: 摆明了用栈来写 如果字符串是正数,则把字符串转化为数字push进栈中 如果字符串是负数,则先忽略第一个负号并将其转化为数字,最后再乘个-1,push进栈中 如果字符串是运算符,则取栈顶前两个元素出来进行运算,然后把结果再push进栈中 最后栈顶元素就是答案 class Solu 阅读全文
posted @ 2022-03-25 12:12 北原春希 阅读(34) 评论(0) 推荐(0) 编辑
摘要:✔做题思路 or 感想: 做这种对称匹配类问题,相当适合用栈来解 有三种不匹配情况 {],单纯不匹配 {{}左边多了 []]右边多了 遇到这三种直接return false就好 class Solution { public: bool isValid(string s) { stack<char> 阅读全文
posted @ 2022-03-25 11:49 北原春希 阅读(22) 评论(0) 推荐(0) 编辑
摘要:✔做题思路 or 感想 : 用队列实现栈,仅仅用一个队列就可以了 push:直接push进队列就好 pop:把队首加到队尾,直到最开始的队尾变成了队首,这样就可以取最开始的队尾的值了。 peek:这个和pop的操作差不多,但是最后的操作有别。在最后取完队首(即是最开始的栈顶)后,要再把队首加到队尾去 阅读全文
posted @ 2022-03-25 11:24 北原春希 阅读(19) 评论(0) 推荐(0) 编辑
摘要:✔做题思路 or 感想 : 用栈来实现队列的一般方法是:造一个输入栈和一个输出栈来模拟队列 当要push时,则把元素push进输入栈 当要pop时,检测输出栈是否有元素。若有,则直接把输出栈的栈顶元素pop掉就好。若无,则要先把输入栈的元素倒进输出栈,再进行操作 class MyQueue { pu 阅读全文
posted @ 2022-03-25 11:07 北原春希 阅读(35) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示