树
文章平均质量分 69
《算法笔记》树部分
yc_cy1999
一只喜欢cc和想去南大的小羊
展开
-
721. Accounts Merge【并查集】⭐
文章目录题目描述知识点我的实现码前思考代码实现时空复杂度分析码后反思参考文档题目描述知识点并查集我的实现码前思考对于这种集合合并的问题,并查集最适合了。代码实现//感觉可以先使用排序进行同名分组,再在组里面进行小范围的并查集合并。//但是我直接使用并查集算了class Djset{ public: vector<int> parent; //记录节点的根 vector<int> rank; //记录根节点的深度(用.原创 2021-01-19 09:15:15 · 344 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树【树+递归】
文章目录题目描述知识点我的实现结果码前思考代码实现码后反思题目描述知识点树,递归我的实现结果码前思考模板题代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {.原创 2021-01-08 21:24:51 · 67 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找【数组 / BST】
文章目录题目描述知识点解法一——二分结果码前思考代码实现解法二——思维⭐⭐⭐⭐⭐(重要!!!)结果码前思考代码实现码后反思参考文档题目描述矩阵的每行从左到右是升序,每列从上到下也是升序,在矩阵中查找某个数。知识点二分、分支、思维解法一——二分结果码前思考看到有序,第一反应就是二分查找。最直接的做法,一行一行的进行二分查找即可。此外,结合有序的性质,一些情况可以提前结束:比如某一行的第一个元素大于了 target ,当前行和后边的所有行都不用考虑了,直接返回 false。.原创 2021-01-04 19:53:09 · 293 阅读 · 0 评论 -
⭐⭐⭐【树的遍历】PAT A1053 Path of Equal Weight (30分)
文章目录题目描述知识点我的实现码前思考代码实现码后反思题目描述求满足【根节点】到【叶子节点】的权值为S的所有路径,路径需要降序输出。知识点树的遍历我的实现码前思考需要使用一个vector来保存路径,你依然可以不建树。代码实现#include <iostream>#include <cstdio>#include <vector>#include <algorithm>using namespace std;int N,M,S;.原创 2020-08-19 16:38:16 · 91 阅读 · 0 评论 -
【后序+中序重构】PAT A1020 Tree Traversals (25分)
文章目录题目描述知识点我的实现码前思考代码实现码后反思题目描述知识点二叉树的遍历我的实现码前思考我第一次用的是建树的方式,后来看了柳神的代码,原来可以之间得到层序遍历结果,妙啊。利用的是完全二叉树的性质。代码实现#include <iostream>#include <queue>#include <map>#include <algorithm>using namespace std;const int maxn = 40;.原创 2020-08-18 22:40:50 · 79 阅读 · 0 评论 -
⭐⭐⭐⭐⭐【树的遍历和重构】LeetCode 297. Serialize and Deserialize Binary Tree
文章目录题目描述知识点我的实现结果码前思考代码实现码后反思参考题解题目描述知识点树的遍历和重构我的实现结果码前思考这道题目我第一次写的时候写错了。用的是暴力层序遍历,而且还是构建了一棵完全二叉树。导致空结点特别多,然后就超时了。我看了网友的题解发现原来二叉树的题目,万变不离其中,还是DFS或者BFS,还是树的前中后序遍历啊!之前在我们的认知当中,必须要中序搭配上前序或者后序才能得到原来的树。这是因为前序序列或者后序遍历可以确定根节点,中序序列可以确定左右子树。无法只使用前序序列.原创 2020-08-03 16:03:14 · 107 阅读 · 0 评论 -
LeetCode 437. Path Sum III【前缀和 / 双重DFS】⭐⭐⭐⭐⭐
文章目录题目描述知识点我的傻逼解法结果思路代码双重DFS解法结果思路代码前缀和解法结果思路代码反思题目描述知识点树、DFS、前缀和我的傻逼解法结果思路使用vector返回所有的子路径…啊,我这个方法未免太蠢了吧,我好笨。代码//我能想到的只有返回 当前结点的所有路径和vectorclass Solution {public: int cnt=0; int target; int pathSum(TreeNode* root, int sum) {.原创 2020-08-01 20:32:41 · 360 阅读 · 0 评论 -
【合并二叉树】LeetCode 617. Merge Two Binary Trees
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点树结果实现码前思考emmm,看懂题目的意思应该就能动手写啦,(づ ̄3 ̄)づ╭❤~代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left.原创 2020-07-28 19:48:04 · 66 阅读 · 0 评论 -
【先右后左的中序遍历】LeetCode 538. Convert BST to Greater Tree
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述哈哈哈,csdn给我返回了一个错误的图片url,舍不得删,记录一下:知识点树的遍历结果实现码前思考先右后左,中序遍历进行累加;我用的递归,当然也可以迭代,但是何必~时间紧张啦代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNod.原创 2020-07-28 17:07:13 · 353 阅读 · 0 评论 -
LeetCode 236. Lowest Common Ancestor of a Binary Tree⭐⭐⭐⭐⭐【LCA】
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点树结果实现码前思考设置一个函数bool find(TreeNode* root,TreeNode* p,TreeNode *q),代表以root为根结点的树,是否存在p或者q;设置一个flag变量由于标记是否找到lca,这样可以用于剪枝对于递归函数里面需要分情况进行讨论:第一种情况:p,q分别在左右;第二种情况:root为p/q,q/p在左子树或者右子树第三种情况:root为p/q,q/p不在左子树或者右.原创 2020-07-26 20:10:41 · 176 阅读 · 0 评论 -
【翻转二叉树】LeetCode 226. Invert Binary Tree
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点树结果实现码前思考树的很多操作都是递归操作左右子树实现的。。。因此,采用递归的方式翻转二叉树,体现一种自顶向下,再自底向上的思想。代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * Tree.原创 2020-07-26 16:30:21 · 92 阅读 · 0 评论 -
LeetCode 208. Implement Trie (Prefix Tree)【前缀树标准模板题】⭐⭐⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点设计题,前缀树结果实现码前思考这道题目我不太会,完全是按照别人的题解,一步一步抄下来的。代码实现//题目要求实现前缀树,但是我不知道应该怎么实现,我只会暴力枚举所有的前缀放到集合里面。。。class Trie {public: bool isEnd; Trie* next[26];//后继26个小写字母指针数组 /** Initialize your data structure .原创 2020-07-26 16:11:49 · 87 阅读 · 0 评论 -
【知识点9】前缀树(Trie)⭐⭐⭐⭐⭐
文章目录介绍Tried????定义类Trie插入查找前缀匹配总结全部代码最后参考文档Trie [traɪ] 读音和 try 相同,它的另一些名字有:字典树,前缀树,单词查找树等。介绍Tried????Trie 是一颗非典型的多叉树模型,多叉好理解,即每个结点的分支数量可能为多个。为什么说非典型呢? 因为它和一般的多叉树不一样,尤其在结点的数据结构设计上,比如一般的多叉树的结点是这样的:struct TreeNode { VALUETYPE value; //结点值 Tree转载 2020-07-26 15:43:36 · 139 阅读 · 0 评论 -
⭐⭐⭐【DFS+理解题意】找出直系亲属
文章目录题目描述代码实现码后反思题目描述代码实现//我觉得使用DFS更简单易懂一些//采用邻接表记录#include <cstdio>#include <iostream>#include <string>#include <vector>using namespace std;const int maxn = 30;vector<int> adj[maxn];int n;int m;int res;void .原创 2020-06-26 17:11:19 · 284 阅读 · 0 评论 -
⭐⭐⭐⭐⭐【并查集+树】Is It A Tree?
文章目录题目描述代码实现码后反思题目描述代码实现//其实可以不用并查集做吧,直接DFS开搞啊啊 #include <cstdio>#include <unordered_map>using namespace std;const int maxn = 10010;unordered_map<int,int> father;unordered_map<int,int> inDegree;int find(int x){ if(fat.原创 2020-06-26 16:05:10 · 201 阅读 · 0 评论 -
【并查集模板题】连通图
文章目录题目描述代码实现码后反思题目描述代码实现#include <cstdio>const int maxn = 1010;int father[maxn];int n;int m;int find(int x){ if(father[x]==x){ return x; }else{ int root = find(father[x]); father[x]=root; return root; }}void Union(int u,int .原创 2020-06-26 15:15:23 · 107 阅读 · 0 评论 -
【裸的并查集】畅通工程
文章目录题目描述代码实现码后反思题目描述代码实现//感觉使用DFS会更好,但是需要练习并查集写法。。。 //每次读取进行一次合并father,然后看看有多少个father就好 #include <cstdio>#include <unordered_set>using namespace std;const int maxn = 1010;int father[maxn];int n;int m;int find(int x){ if(father[.原创 2020-06-26 15:01:51 · 151 阅读 · 0 评论 -
LeetCode 102. Binary Tree Level Order Traversal【裸的层序遍历】
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述树的层序遍历,输出每一层知识点BFS,树的层序遍历结果实现码前思考简单题,就是树的层序遍历,只需要记录每一层的数量就好代码实现//简单题,只需要每次记录个数就好,注意特判条件/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right.原创 2020-06-19 14:25:13 · 124 阅读 · 0 评论 -
【前序+中序遍历】PAT A1086. Tree Traversals Again
文章目录题目描述知识点实现码前思考码后反思码后反思题目描述知识点树的遍历实现码前思考通过栈得到前序和中序遍历结果,然后再模拟建树得到后序遍历结果;码后反思//通过中序和先序遍历解题 #include <iostream>#include <stack>using namespace std;const int maxn = 40;stack<int> stk;int n;int pre[maxn];int in[maxn];.原创 2020-05-24 18:50:42 · 106 阅读 · 0 评论 -
LeetCode 114. Flatten Binary Tree to Linked List【树的DFS递归封装思想】⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点树的遍历、DFS结果实现码前思考我的思想就是采用先序遍历,不断将结点拼接到左子树,最后反转成右子树代码实现//首先先序遍历得到,然后再反转左右子树/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * .原创 2020-05-23 20:12:44 · 264 阅读 · 0 评论 -
98. Validate Binary Search Tree【中序遍历、验证二叉搜索树】⭐⭐⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点BST的中序遍历性质、DFS结果实现码前思考我之前想的是直接使用该节点的左右结点的值小于等于或者大于来做,结果忽视了还有该节点的根结点可能会小于该节点右结点的情况。我想这也是这道题通过率低的原因吧;利用BST中序遍历之后,是有序地性质,可以使用中序遍历作为载体,保存一个pre遍历用于比较是否有序,从而,实现验证BST;代码实现//树的深度优先搜索//注意提前终止,防止超时/** * Definition.原创 2020-05-23 20:05:43 · 152 阅读 · 0 评论 -
LeetCode 101. Symmetric Tree【树的遍历】⭐⭐⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述判断一棵树是否是对称树知识点树的遍历、DFS结果实现码前思考我比较笨,使用的是先左边优先遍历一次,再右边优先遍历一次,判断两次结果是否相同来判断是否是对称树;(注意空结点也要进行储存,我这里用的是INT_MIN)代码实现//通过中序遍历来解题//要求先序遍历和后序遍历的结果是相同的/** * Definition for a binary tree node. * struct TreeNode { *.原创 2020-05-23 19:53:40 · 265 阅读 · 0 评论 -
LeetCode 104. Maximum Depth of Binary Tree【树的DFS、水题】
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述给定树的结构,求树的高度知识点树的遍历,DFS/BFS结果实现码前思考水题代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), .原创 2020-05-23 19:43:26 · 93 阅读 · 0 评论 -
LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal【重构二叉树模板题+序列坐标+二叉树型DFS】
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述即给定前序和中序遍历结果,然后构建二叉树知识点树的遍历,DFS结果实现码前思考模板题,是一类用于坐标确定的DFS题代码实现//模板题,冲//leetcode注意边界条件/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right;.原创 2020-05-23 19:40:41 · 107 阅读 · 0 评论 -
PAT A1102 Invert a Binary Tree
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点树的遍历实现码前思考在读取左右孩子的时候,还是使用string类型比较好,使用%c会出现好多问题,佛了。。。就是很简单的题,先遍历右孩子即可。代码实现#include "bits/stdc++.h"using namespace std;//静态建树const int maxn = 20;struct node{ int l; int r; node(){} node(int _l,int _r):l.原创 2020-05-11 17:30:16 · 75 阅读 · 0 评论 -
【堆的完全二叉树性质】PAT A1155 Heap Paths
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述1155 Heap Paths (30分)知识点堆实现码前思考比较水的一道题。。。主要还是使用了完全二叉树可以使用数组静态实现的特性。代码实现//从1开始编号 #include "bits/stdc++.h"using namespace std;const int maxn = 1e3+10;int n;int data[maxn];bool isMax;bool isHeap;vector<in.原创 2020-05-10 19:09:05 · 352 阅读 · 0 评论 -
⭐⭐⭐⭐⭐【LCA模板题】PAT A1151 LCA in a Binary Tree
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点树的遍历实现码前思考这道题和之前的某道题很像,但是那道题是BST;由于我是一个不会变通的人,所以我就把这个二叉树变成了BST,????。根据中序遍历,对结点值重新编号。。。之后操作就跟原来那道题一样了。。。代码实现#include "bits/stdc++.h"using namespace std;const int maxn = 1e4+10;//将二叉树映射成BSTunordered_map<in原创 2020-05-09 20:05:39 · 202 阅读 · 0 评论 -
【判断是否是堆】PAT A1147 Heaps
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点树、完全二叉树以及堆的性质实现码前思考完成二叉树的静态实现特征是本题的关键,感觉使用结构体,可能会超时呢~~代码实现//不需要建树直接根据完全二叉树的性质使用//数组下标从1开始 #include "bits/stdc++.h"using namespace std;const int maxn =...原创 2020-05-08 17:30:59 · 124 阅读 · 0 评论 -
⭐⭐⭐⭐⭐【LCA in BST+先序遍历理解】PAT A1143 Lowest Common Ancestor
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点BST的遍历实现码前思考题中指明了给的整数是distinct的;对于树中的每一个整数,我们使用unordered_set进行保存,从而可以直接判断是否存在于树中,否则查找会花费很大的时间复杂度;我在第一次写的时候,测试点3,4超时,死活没有找出来原因,后来百度,发现原来是因为我建树的过程是一个一个 insert...原创 2020-05-07 17:10:59 · 231 阅读 · 0 评论 -
【前中后序遍历】PAT A1138 Postorder Traversal
知识点树的遍历实现码前思考需要将构造二叉树和遍历二叉树融合在一起;代码实现#include "bits/stdc++.h"using namespace std;const int maxn = 5e4+10;struct node{ int val; node* l; node* r; node(int v):val(v),l(NULL),r(NULL){}...原创 2020-05-05 21:00:57 · 97 阅读 · 0 评论 -
⭐⭐⭐⭐⭐【红黑树】PAT A1135 Is It A Red-Black Tree
文章目录题目描述知识点实现码前思考代码实现码后思考题目描述知识点BST实现码前思考这5个性质里,第3个和第5个我一时没看懂,还是wiki了一下才明白的。红黑树的定义里,叶子节点是NULL节点,而不是通常所说的左右孩子为空的节点是NULL节点,也就是说每个左右孩子为空的节点,实际上左右孩子都是叶子节点。然后,性质5是说每个节点到达叶子节点(NULL)节点的简单路径上经过的黑色节点...原创 2020-05-04 19:33:09 · 212 阅读 · 0 评论 -
⭐⭐⭐⭐⭐PAT A1130 Infix Expression
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点二叉树遍历实现码前思考标准的二叉树遍历题,只需要考虑好情况就ok代码实现//类似于中序遍历的写法#include "bits/stdc++.h"using namespace std;const int maxn = 30;const int maxs = 20;struct node{ c...原创 2020-05-03 22:11:45 · 88 阅读 · 0 评论 -
LeetCode 337. House Robber III【树形DP模板题+集合划分的观点】⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思参考文档题目描述知识点树形DP结果实现码前思考对于树形DP的问题,其实说白了,我认为树形DP问题就是在树结构上,求解最优化问题。有了上面的理解,树形DP问题的解题套路就是以当前子树根结点,结合当前子树根结点的左子树和当前子树根结点的右子树进行分情况讨论。在分情况讨论中,我们其实就已经解决了动态规划中的最优子结构和重叠...原创 2020-05-02 22:02:48 · 122 阅读 · 0 评论 -
LeetCode 543. Diameter of Binary Tree【树形DP模板题】
文章目录题目描述结果知识点实现码前思考代码实现码后反思题目描述结果知识点树形DP实现码前思考由于之前做过了⭐LeetCode 124. Binary Tree Maximum Path Sum,这道题的思想和它是一样的,所以就没多想了。代码实现//我记得我之前做过一道“剥洋葱的题”//到时候回去看看//这道题就是典型的DFS题/** * Definition ...原创 2020-05-02 20:30:10 · 149 阅读 · 0 评论 -
LeetCode 124. Binary Tree Maximum Path Sum【树形DP模板】⭐⭐⭐
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点树形DP实现码前思考看见最优化的问题,我们基本上是要思考一下能不能使用DP来进行求解,虽然可能有时不行,但是一定要先思考能不能用DP,不能没有尝试就放弃DP思想;这其实是一类非常常见的DP思想,为什么说常见呢?因为这个问题可以很好的转换成另外的问题;问题转化原始的问题其实我们是很难使用动态规划的,我...原创 2020-05-02 19:59:05 · 139 阅读 · 0 评论 -
PAT A1127 ZigZagging on a Tree
文章目录题目描述知识点实现码前思考代码实现码后思考题目描述知识点树的遍历(中序,后序,层序)实现码前思考关于构树就是简单的模板;至于如何实现这种特殊的层序遍历,可以使用队列加栈的方式,同时记录当前层数。代码实现#include "bits/stdc++.h"using namespace std;const int maxn = 50;struct node{...原创 2020-05-02 16:31:21 · 168 阅读 · 0 评论 -
【平衡二叉树】⭐PAT A1123 Is It a Complete AVL Tree
实现码前思考这就是一道需要背模板的题,就是要完完整整地把模板背下来!下面是一些套路:判断是否是完全二叉树可以通过层序遍历对结点编号,如果编号值超过结点总数,那么一定不是完全二叉树!代码实现//使用平衡二叉树//高度//平衡因子//LL,LR,RL,RR #include "bits/stdc++.h"using namespace std;int data[50]...原创 2020-05-01 19:35:01 · 121 阅读 · 0 评论 -
⭐⭐⭐⭐⭐PAT A1119 Pre- and Post-order Traversals
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点二叉树的遍历实现码前思考首先要理解为什么前序遍历和后序遍历的结果有可能不能构成唯一一颗树?考虑下面两种情形:1.pre: 1、2 ...post: ... 3、12.pre: 1、2 ...post: ... 2、1对于1,我们很容易知道结点1的左子树是以2为根结点,右子树是以3为根结点。但是...原创 2020-04-30 20:10:19 · 415 阅读 · 2 评论 -
【并查集】PAT A1118 Birds in Forest
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点并查集实现码前思考典型的并查集模板题根据每一行输入合并这一行的数据到一个集合中,同时记录这些数据的出现,用set(避免重复)。根据set里面的元素,逐个遍历得到森林;代码实现//注意为什么使用集合 #include "bits/stdc++.h"using namespace std;con...原创 2020-04-30 19:46:57 · 204 阅读 · 1 评论 -
【求树的深度】PAT A1115 Counting Nodes in a BST
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点裸的BST实现码前思考只需要在建树过程中保存深度就可以了,之前还多做了一次层序遍历,太蠢了!任何涉及到要对树的结构进行改变的操作都需要传地址node* &root;NULL也算是一棵树,是空树;注意左右孩子初始化为NULL;代码实现//使用二叉树建树#include "bits/stdc++....原创 2020-04-29 22:22:41 · 100 阅读 · 0 评论