![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
递归
收录有特色的递归题
CervoLu
这个作者很懒,什么都没留下…
展开
-
235二叉树的最近公共祖先
因为是从根节点开始的,如果root在pq之间,那root就是最近公共祖先。#include<iostream>#include<queue>#include<vector>#include<unordered_set>using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0),原创 2021-11-26 22:36:01 · 349 阅读 · 0 评论 -
112路径总和
刚开始没注意必须是根节点到叶节点,所以必须多一个是不是叶节点的判定,程序整体用递归实现。#include<iostream>#include<queue>#include<vector>using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nu原创 2021-11-26 19:07:47 · 48 阅读 · 0 评论 -
226反转二叉树
核心在于,如果一个节点的子节点的子节点都已经交换顺序了,那么就交换该节点的左右子节点。#include<iostream>#include<queue>#include<vector>using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nul原创 2021-11-26 18:41:23 · 56 阅读 · 0 评论 -
101对称二叉树
每次比较两个对称指针节点的值,可以设置两个指针,他们每次都一个向左,一个向右,每次递归来实现。#include<iostream>#include<queue>#include<vector>using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right原创 2021-11-26 18:14:26 · 423 阅读 · 0 评论 -
145 二叉树的后序遍历
#include<iostream>#include<vector>using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullpt原创 2021-11-22 20:17:29 · 40 阅读 · 0 评论 -
94二叉树的中序遍历
和前面前序遍历差不多#include<iostream>#include<vector>using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), r原创 2021-11-22 20:06:08 · 38 阅读 · 0 评论 -
144二叉树的前序遍历
用递归就按书上的来就行,题解也提供了迭代的方法,太麻烦。#include<iostream>#include<vector>using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x)原创 2021-11-22 20:02:14 · 33 阅读 · 0 评论 -
21合并两个有序链表
我写的复杂了,主要原因是没有意识到一个问题,就是链表的链接只需要接一个就行了,而不需要一个节点一个节点的去接。题解有两种方法,迭代和递归#include<iostream>using namespace std;struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {}原创 2021-11-20 15:11:10 · 718 阅读 · 0 评论 -
17电话号码的字母组合
看到所有组合就应该明白这题考察了搜索算法,可以使用DFS或者BFS数字对应字母用了一个哈希表实现,主体部分看了题解,自己加了点注释,主要之前没怎么用过DFS。#include<iostream>#include<vector>#include<unordered_map>using namespace std;class Solution {public: vector<string> letterCombinations(string原创 2021-11-17 11:18:31 · 65 阅读 · 0 评论 -
50快速幂
方法一分治法,分奇数和偶数方法二官方题解的方法二,妙极,将需要奇数加一次的幂次用二进制表示#include<iostream>using namespace std;//递归class Solution {public: double myPow(double x, int n) { long long N = n; return N >= 0 ? quickpow(x, N) : 1.0 / quickpow(x, -N);原创 2021-11-05 20:15:21 · 57 阅读 · 0 评论