![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
递归
递归
lucky tiger
要一直前进,一直静下心来学习。
展开
-
力扣19,删除链表中的倒数第n个节点 一次遍历
1、双指针明确来说也不算一次遍历因为需要先移动n次快指针这里要注意删除头节点的情况。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * Lis..原创 2020-10-19 17:07:28 · 259 阅读 · 0 评论 -
力扣486 预测赢家
1、递归class Solution {public: bool PredictTheWinner(vector<int>& nums) { if(nums.size()%2 == 0)return true; return dfs(nums,0,nums.size()-1,1)>=0; } int dfs(vector<int>& nums,int start,int end,int trun..原创 2020-09-02 10:13:20 · 164 阅读 · 0 评论 -
回溯问题(回溯剪枝)
由于回溯算法的时间复杂度很高,因此,如果在遍历的时候,如果能够提前知道这一条分支不能搜索到满意的结果,就可以提前结束,这一步操作称之为剪枝。回溯算法会大量应用“剪枝”技巧达到以加快搜索速度。有些时候,需要做一些预处理工作(例如排序)才能达到剪枝的目的。预处理工作虽然也消耗时间,但一般而且能够剪枝节约的时间更多。还有正是因为回溯问题本身时间复杂度就很高,所以能用空间换时间就尽量使用空间。否则时间消耗又上去了。大佬力扣写的很详细:https://leetcode-cn.com/problems/pe原创 2020-07-23 14:47:16 · 1758 阅读 · 0 评论 -
双递归二叉树 力扣1367二叉树中的列表 面试题04.10检查子树
1、https://leetcode-cn.com/problems/linked-list-in-binary-tree/class Solution {public: bool dfs(ListNode* head, TreeNode* root) { if(head == nullptr) return true; if(root == nullptr) return false; if(root->val != head-原创 2020-07-14 21:06:55 · 136 阅读 · 0 评论 -
力扣 剑指offer 13.机器人的运动范围 dfs 回溯同矩阵中路径
1、2、class Solution {public: int s=0; int movingCount(int m, int n, int k) { vector<vector<int>>v(m,vector<int>(n)); dfs(0,0,m,n,k,v); return s; } void dfs(int x,int y,int m,int n,int k,vect原创 2020-06-22 16:22:22 · 141 阅读 · 0 评论 -
力扣 784 字母大小全排列 回溯算法
1、回溯就是递归的过程出现了分叉有选择递归class Solution {public: vector<string> letterCasePermutation(string S) { vector<string> res; dfs(S,res,0); return res; } void dfs(string S, vector<string>&res, int index原创 2020-06-05 14:12:58 · 247 阅读 · 0 评论 -
力扣 872 叶子相似的树
1、https://leetcode-cn.com/problems/leaf-similar-trees//** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */c原创 2020-06-02 14:23:59 · 134 阅读 · 0 评论 -
力扣 589 N叉树的前序遍历
1、for(autoc:root->children){firstorder(c);}N叉树访问需要注意的是root->children有多个节点,children[0] [1]所以我们需要遍历来一个个访问。class Solution {public: vector<int> preorder(Node* root) { vector<i...原创 2020-06-02 09:47:13 · 207 阅读 · 0 评论 -
力扣 257 二叉树所有路径 递归
1、2、递归搞清每一步干什么,什么时候结束/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector原创 2020-05-29 17:33:00 · 144 阅读 · 0 评论 -
力扣337 打家劫舍iii 递归 二叉树
class Solution {public: int rob(TreeNode* root) { vector<int> ans = dfs(root); return max(ans[0],ans[1]); } vector<int> dfs(TreeNode* root) { if(root == nullptr) return {0,0}; vector<int&g...原创 2020-05-29 13:42:27 · 156 阅读 · 0 评论 -
力扣213 打家劫舍 递归
1、2、一次提交通过偷第一个不要最后一个偷最后一个不要第一个class Solution {public: int rob(vector<int>& nums) { int n = nums.size(); if(n==0) return 0; if(n==1) return nums[0]; int dp0 = 0; int dp1 = nums[0]; .原创 2020-05-29 10:06:15 · 175 阅读 · 0 评论 -
力扣 394 字符串解码 栈
1、2、3[a]2[bc]3 num= 3[ numstack : 3a cur=a] 迭代 strstack aaa cur=aaa stack pop2 num=2[ numstack : 2bc strstack.push(cur) cur.clear() strstack aaa] strstrack aaabcbc3、class Solution {public: string decodeString(s...原创 2020-05-29 09:24:22 · 174 阅读 · 0 评论 -
力扣112 路径总和
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: bool hasPathSum(TreeNode* ro...原创 2020-05-24 16:27:39 · 156 阅读 · 0 评论 -
力扣108 将有序数组转换为二叉搜索树 递归 左闭右闭
1、2、/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* sortedArra原创 2020-05-24 15:19:58 · 147 阅读 · 0 评论 -
力扣606 根据二叉树创建字符串 递归*****
1、2、/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: string tree2str(Tree原创 2020-05-23 22:04:43 · 179 阅读 · 1 评论 -
力扣617 合并二叉树 递归
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* mergeTrees(TreeNod...原创 2020-05-23 21:22:22 · 137 阅读 · 0 评论 -
力扣563 二叉树坡度 递归
1、2、/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution { int sum=0;public: int m原创 2020-05-23 21:03:14 · 157 阅读 · 0 评论 -
力扣534 二叉树直径 递归
1、2、/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution { int ans=0;public: int d原创 2020-05-23 20:41:21 · 133 阅读 · 0 评论 -
力扣1022 从根到叶的二叉树之和 递归
1、2、/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: const long num=1e9+7原创 2020-05-23 16:38:54 · 121 阅读 · 0 评论 -
力扣105 从前序与中序遍历构造二叉树 递归
1、2、/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: unordered_map<.原创 2020-05-23 15:10:46 · 105 阅读 · 0 评论 -
递归调用的cnt++问题
1、日常憨憨这里depth+1++depthdepth++区别就在于depth+1我的depth值没有改变所以我后面左右子树都加1不会出现错误++depth我的值已经改变了,这是左右子树加1就有可能冲突比如一个++变成2 另一个又++变成了3depth++直接把depth值带进去函数结束了才++,一样可能重复加/** * Definition for a binary tree node. * struct TreeNode { * int val; *原创 2020-05-21 20:28:24 · 1011 阅读 · 0 评论 -
力扣993 二叉树堂兄弟节点 递归+DFS
1、2、/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int xdepth=-1; i原创 2020-05-21 19:33:53 · 180 阅读 · 0 评论 -
力扣680 验证回文字符串 递归
1、2、class Solution {public: bool checkPalindrome(const string& s, int low, int high) { for (int i = low, j = high; i < j; ++i, --j) { if (s[i] != s[j]) { return false; } } r原创 2020-05-20 08:59:27 · 175 阅读 · 0 评论 -
力扣 487 路径总和III 二叉树 双递归
1、2、/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * ...原创 2020-04-17 15:53:23 · 191 阅读 · 0 评论