树
主要是二叉树
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 · 357 阅读 · 0 评论 -
653两数之和IV
二叉搜索树中的两数之和,通过遍历得到一个vector数组,转化出1两数之和问题。#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:03:07 · 339 阅读 · 0 评论 -
98验证二叉搜索树
验证的方法并不是每个节点都大于左边的,小于右边的,而是每个节点必须大于左子树每一个节点,小于右子树每一个节点。方法一是给每个节点赋予一个上限和一个下限,每次判断节点值是否在界内。方法二是看了一篇题解,根据二叉搜索树中序遍历后就是递增数列的原理进行。这个递归用的很妙#include<iostream>#include<queue>#include<vector>using namespace std;struct TreeNode { int val;原创 2021-11-26 20:48:17 · 433 阅读 · 0 评论 -
701 二叉搜索树中的插入操作
二叉搜索树的插入,只要到规定的节点位置新建一个叶节点就可以了。#include<iostream>#include<queue>#include<vector>using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {}原创 2021-11-26 19:52:09 · 240 阅读 · 0 评论 -
700二叉树中的搜索
根据二叉树的性质,很好判断#include<iostream>#include<queue>#include<vector>using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) :原创 2021-11-26 19:21:42 · 292 阅读 · 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 · 52 阅读 · 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 · 61 阅读 · 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 · 433 阅读 · 0 评论 -
104二叉树的深度
二叉树的深度用深度优先搜索可以很快的写出来#include<iostream>#include<queue>#include<vector>using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(原创 2021-11-24 22:51:52 · 175 阅读 · 1 评论 -
102二叉树的层序遍历
层序遍历通过一个 队列实现,循环直到队列为空为止#include<iostream>#include<queue>#include<vector>using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNo原创 2021-11-23 23:49:45 · 66 阅读 · 1 评论 -
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 · 46 阅读 · 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 · 42 阅读 · 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 · 37 阅读 · 0 评论