![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树
溺水的鱼xu
这个作者很懒,什么都没留下…
展开
-
已知前序和中序,重建二叉树
已知前序和中序,重建这颗二叉树前序:1 2 4 8 9 5 10 3 6 7中序: 8 4 9 2 10 5 1 6 3 7后序:8 9 4 10 5 2 6 7 3 1# include<iostream>using namespace std;int pre[100]={1 ,2, 4, 8, 9, 5, 10, 3, 6, 7};int in[100]={8 ,4 ...原创 2019-12-01 16:23:35 · 270 阅读 · 0 评论 -
二叉树的镜像
NC72 二叉树的镜像/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可原创 2021-07-30 09:01:20 · 127 阅读 · 0 评论 -
NC16 判断二叉树是否对称
NC16 判断二叉树是否对称class Solution {public: /** * * @param root TreeNode类 * @return bool布尔型 */ bool judge(TreeNode *l,TreeNode *r) { if(l==NULL&&r==NULL) return true; if(l->val==r->val&a原创 2021-07-30 09:00:19 · 129 阅读 · 0 评论 -
NC6 二叉树的最大路径和
NC6 二叉树的最大路径和class Solution {public: int Max=INT32_MIN; int build(TreeNode *root) { if(root==NULL ) return 0; if(root->right==NULL&&root->left==NULL) { Max=max(Max,原创 2021-07-30 08:58:03 · 139 阅读 · 0 评论 -
NC102 在二叉树中找到两个节点的最近公共祖先
NC102 在二叉树中找到两个节点的最近公共祖先递归写法class Solution {public: /** * * @param root TreeNode类 * @param o1 int整型 * @param o2 int整型 * @return int整型 */ TreeNode *find(TreeNode *root,int o1,int o2) { if(root==原创 2021-07-29 15:11:00 · 111 阅读 · 0 评论 -
LeetCode 662. 二叉树最大宽度
LeetCode 662. 二叉树最大宽度做题后的反思这道题太恶心了,还要考虑数据范围溢出的问题。同时通过做这道题我知道了c++中new 出来的结构体是一个指针类型的,要使用node *这种类型的对象来接收。同时,对于这种指针类型的我取值使用->,而不是点。还有就是一般值与下标有关的我们做题时要考虑直接把值与标存放在一起,使用结构体或者pair,这样更加放标解题。struct node{ TreeNode *t; long long width; node(Tre原创 2021-07-24 09:48:19 · 61 阅读 · 0 评论 -
NC99 树的直径
NC99 树的直径这道题有个坑。这道题不是二叉树,而且还需要你自己建图。而且不可以使用二维数组建图,因为n太大。要使用领接表。同时我第一次想的是最长的路径必定是在一个叶子节点到另一个叶子节点,我找遍所有的取最大的,然后去最大的就行了,那么有几个子叶节点就需要几个dfs,那么这样还是会超时。于是,就有了,先随便找一个点搜到他的最远点,然后在从最原来搜,这次搜到就是最大的了。下面是我两次的代码,第一个是超时的。/** * struct Interval { * int start; * in原创 2021-07-25 00:31:18 · 639 阅读 · 0 评论 -
LeetCode 662. 二叉树最大宽度
LeetCode 662. 二叉树最大宽度这道题比较坑,如果你直接按左子树,2i,右子树 2i+1,这样存的话数据会溢出。所以你需要简单操作一下。if(a->t->left) q.push(new node(a->t->left,(a->width-start+1)*2));if(a->t->right) q.push(new node(a->t->right,(a->width-start+1)*2+1));struct node{原创 2021-07-26 17:33:57 · 91 阅读 · 0 评论 -
NC60 判断一棵二叉树是否为搜索二叉搜索树和完全二叉树
NC60 判断一棵二叉树是否为搜索二叉搜索树和完全二叉树判断是二叉搜索树的条件是中序遍历是有序的判断是完全二叉树就是在遇到空节点之后剩余的应当全是空节点class Solution {public: vector<bool> vec; vector<int > v; void in(TreeNode *root) { if(root) { in(root->left);原创 2021-07-26 17:45:27 · 108 阅读 · 0 评论 -
LeetCode 543. 二叉树的直径
LeetCode 543. 二叉树的直径通过这道题我好好思考了一下递归是如何写的。首先你要明白你这个函数式用来实现什么的,然后为了获得这个结果应该下层函数获得什么,然后在写一个递归边界就行了。顺着上面的思路想一下,我这个函数式为了计算以这个节点为边界的最长链的长度的。那么你的返回值就要是max(len1,len2)+1;递归边界是root!=NULL。这样你一个递归函数就实现了。其余的就是你写你通过这个递归函数想要做什么了。class Solution {public: int ma原创 2021-07-24 20:28:19 · 85 阅读 · 0 评论