![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树
cc 提升ing 变优秀ing
有需要搜广推nlp实习生的部门吗?
展开
-
leetcode:1038. 把二叉搜索树转换为累加树(树,中等)
題目:我的思路:也挺不錯的!!!/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), r原创 2021-02-26 19:51:52 · 107 阅读 · 1 评论 -
leetcode:1028. 从先序遍历还原二叉树(困难,树)
题目:分析:刚开始,我以为是返回数组。那太简单了。嗯,要构造一颗树。还可以吧。如果节点只有一个子节点,那么保证该子节点为左子节点。唯一性。感觉不难。good,自己一次秒杀!(就是细节还是调了一小下)代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode()原创 2021-02-20 22:27:42 · 88 阅读 · 0 评论 -
leetcode:1026. 节点与其祖先之间的最大差值(树,中等)
題目:分析:記錄两个最值即可,没什么意思。代碼:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nu原创 2021-02-19 10:14:17 · 101 阅读 · 0 评论 -
leetcode:面试题 04.05. 合法二叉搜索树(中等,二叉搜索树)
题目:分析: return f(min((long long)root->val,x),y,root->left) && f(x,max((long long)root->val,y),root->right);这个条件分析刚开始还写错了啊左子树的话,应该增加一个上限,但是之前子树,有一个更小的上限。右子树的话,应该增加一个下限,但是之前子树,有一个更大的下限。简直胡说八道。代码:/** * Definition for a binary tr原创 2021-01-11 21:13:45 · 114 阅读 · 0 评论 -
leetcode:面试题 04.09. 二叉搜索树序列(树,困难)
题目:分析:自己已经想的很明白了,可是就是不会实现,其实使用一个动态的vector就可以啦,但是其中存放的是指针的值。太菜了。代码:/** * 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-11 20:36:03 · 114 阅读 · 0 评论 -
leetcode:剑指 Offer 68 - II. 二叉树的最近公共祖先(树,简单)
题目:分析:感觉还是有一定难度的。以下代码用来判断已经找到两个点了:if((b1&&b2||b1&&b3||b2&&b3)) { ans=root; }这个是核心,其他的都ok吧!代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;原创 2020-12-25 22:30:00 · 92 阅读 · 0 评论 -
leetcode:剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(简单,树)
题目:分析:总感觉搜索树有一定的特征,忍住没看答案,终于想出来了,直接从根开始比较左右即可。代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */clas原创 2020-12-25 21:45:46 · 77 阅读 · 0 评论 -
leetcode:剑指 Offer 54. 二叉搜索树的第k大节点(树,简单)
题目:分析:天哪,都想到要使用一个额外的数组,怎么就像不到更优化一点点的方法呢?第k小的代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class So原创 2020-12-24 19:32:28 · 79 阅读 · 1 评论 -
leetcode:剑指 Offer 55 - II. 平衡二叉树(树,简单)
題目:分析:也就是树的深度的稍稍进阶,稍稍改进。返回值要注意,此时函数的意义将节点作为根时的最大深度。代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */原创 2020-12-23 16:27:51 · 93 阅读 · 0 评论 -
leetcode:剑指 Offer 28. 对称的二叉树(树,简单)
题目:分析:题目中有说镜像和对称是有关系的。本题,如果从镜像考虑的话,则是从根节点开始比较。如果直接从对称考虑的话,是从左右子树开始比较的。左右子树是镜像的。代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NUL原创 2020-12-18 08:40:13 · 74 阅读 · 0 评论 -
leetocde:剑指 Offer 33. 二叉搜索树的后序遍历序列(中等,树)
題目:分析:很不錯的一道题。好像在洛谷上做过。最后一个是根。代碼:class Solution {public: bool f(vector<int>& postorder,int x,int y) { if(x>=y) return 1; int i=x; for(;i<y;i++) { if(postorder[i]>postorder[y]) br原创 2020-12-18 08:10:55 · 79 阅读 · 0 评论 -
leetcode:剑指 Offer 34. 二叉树中和为某一值的路径(树,中等)
题目:分析:如果做题不认真,不思考,还不如不做。本题和主站上有一道题是一样的,测试后发现自己犯了和上次一样的一个错误。如果到NULL才去判断,那么会导致:1.可能有一个子树的结点会被放进去。2.满足条件的被放两次。特错大错的代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *原创 2020-12-17 15:08:08 · 80 阅读 · 0 评论 -
leetcode:剑指 Offer 26. 树的子结构(树,中等)
题目:分析:就是不认真,小错误太多了吧!!!刚开始忽略了B终止,而A还可以继续的情况。代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class So原创 2020-12-16 11:46:51 · 98 阅读 · 0 评论 -
leetcode:剑指 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) {} * }; */class Solution {public:原创 2020-12-14 09:38:14 · 73 阅读 · 0 评论 -
leetcode:437. 路径总和 III(树,前缀和,中等)
題目:分析:前缀和问题、代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr),原创 2020-12-08 16:28:25 · 105 阅读 · 0 评论 -
leetcode:450. 删除二叉搜索树中的节点(树,中等)
题目:分析:本属于数据结构的基本问题(虽然已经忘完了),值的回顾一下。分为三种情况:1.根节点直接删除。2.只有左子树或者右子树的直接删掉拼接。3.既有左子树又有右子树的,则把左子树的最大值拿过来,或者是右子树的最小值拿过来!虽然简单,但是写起来技巧性挺多的。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeN原创 2020-12-04 16:35:39 · 70 阅读 · 0 评论 -
leetcode:429. N叉树的层次遍历(树,中等)
题目:分析:水题,为什么还是中等。代码:/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val; } Node(int _val, vector<Node*> _children) { val = _val原创 2020-12-02 09:19:50 · 63 阅读 · 0 评论 -
leetcode:222. 完全二叉树的节点个数(树,中等)
题目:分析1:递归:/** * 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 countNodes(Tre原创 2020-11-23 15:08:52 · 97 阅读 · 0 评论 -
leetcode:124. 二叉树中的最大路径和(树,递归,困难)
题目:分析:本来还没思路,看了一下递归,题解看了不到1s,自己就有思路了,还是要先自己独立思考呀。在递归过程中需要进行两部分操作,1.返回的是0,或者是递归时的根节点作为路径端点的最大值。2.更新最大值。两步的区别:返回时是第一张图,当前的根节点A必须只能是端点。而且返回值最小为0,因为可以不包含该节点。最大值则是第二张图,对当前的根节点A没有要求了。代码竟然超时了!:/** * Definition for a binary tree node. * struct TreeNod原创 2020-11-16 09:56:43 · 90 阅读 · 0 评论 -
leetcode:117. 填充每个节点的下一个右侧节点指针 II(树,中等)
题目:分析:由于不是完美二叉树,自己的方法不能做了。看了答案,哦,借助每一层,很容易弄好下一层。代码:/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next(NULL) {} Node(int _val) : val(_原创 2020-11-13 16:18:35 · 78 阅读 · 0 评论 -
leetcode:116. 填充每个节点的下一个右侧节点指针(树,中等)
题目:分析:完美二叉树:树是满的,还是二叉的。我的思路:递归(太棒了)调用每一个结点进行的是,左右子树之间的,如第一层的:蓝色。如第一层的:红色。如第三层的:橙子色。代码:/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL),原创 2020-11-13 13:34:58 · 74 阅读 · 0 评论 -
leetcode:114. 二叉树展开为链表(树,中等)
题目:分析:**起初天真的以为,只要是拉长就可以啦,随便拉,但是原来只能先序。**随便拉:有点复杂。先不断找右子树,在此过程中,把左子树的结点加入栈中,记录最右下方的那个结点是什么,然后将栈内的元素拉直后加到最后,栈内元素也需要经过这样的步骤拉直。代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *ri原创 2020-11-07 18:01:53 · 72 阅读 · 0 评论 -
leetcode:103. 二叉树的锯齿形层次遍历(中等,树)
题目:分析:可以直接使用反转函数。也可以使用vector的inset也可以借助一个栈,来实现。代码:reverse/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * };原创 2020-11-06 20:53:41 · 163 阅读 · 0 评论 -
leetcode:94. 二叉树的中序遍历(中等,树)
请别走,一定要看。方法1:基本回溯,面试官会问你还有什么想法(第二次字节面试,一面算法面就问的这个)方法2:回溯(想了一会,想起来做过编译原理的代码,分析法中说过回溯都可以转化为栈,然后想出来了)方法3:Morris 中序遍历(暂时没准备看)直接使用栈:第一次写成了先序遍历。class Solution {public: vector<int> inorderTraversal(TreeNode* root) { stack<TreeNode*>原创 2020-11-06 15:23:48 · 645 阅读 · 0 评论