树
各种树的题
skywuuuu
这个作者很懒,什么都没留下…
展开
-
leetcode 99. 恢复二叉搜索树
“无脑”思路说是“无脑”,其实我看了一眼标准答案的标题:中序遍历,才反应过来,对二叉搜索树进行中序遍历能得到升序排列的数列是一个很重要的性质啊!“无脑”代码Talk is cheap, show me the code./** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(原创 2021-05-05 10:44:30 · 120 阅读 · 0 评论 -
leetcode 1028. 从先序遍历还原二叉树
前言前两周因为雅思考试和学校里繁重课业没有跟新,现在继续每日至少一题!思考查理芒格说过一定要记住反着想!这道题就是让我们从一个通过先序遍历生成的字符串来还原二叉树,那么我们反过来想,应该如何通过二叉树来生成字符串呢?通过观察示例,我们发现在root->val之前的’-'的数量就代表了这个节点在树中的高度或层数,那么生成的方法应该是这样的:// 伪代码string S;void preOrder(TreeNode* root, int height) { for(int i = 0; i原创 2021-04-24 12:00:50 · 138 阅读 · 0 评论 -
leetcode 1110. 删点成林
思路采用的是类似后序遍历的方式对节点进行删除,理由是我们要先删除左子树和右子树中要删除的节点,再删除自己本身。判断条件:有没有在to_delete中找到该节点代码Talk is cheap, show me the code/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNo原创 2021-04-06 17:35:30 · 196 阅读 · 0 评论 -
leetcode 113. 路径总和 II
思路题目已经给的很明显了。这个很明显就是DFS的套路,走过就push_back,回退就pop_back。代码Talk is cheap, show me the code./** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullpt原创 2021-04-06 16:50:31 · 66 阅读 · 0 评论 -
leetcode 面试题 17.12. BiNode
新的思路新思路没有超时,效果还行,如果想看我的旧思路记得拉到底下!本来不懂怎么做了,直到用中序遍历输出了一遍值,所以多试试总是有好处的hhhhh题目解读:给一个二叉搜索树,将二叉搜索树转换成一个“树链表”,将值从大到小排列下去。思路:从大到小排列值 -> 对二叉搜索树进行中序遍历就可以得到从大到小排列的值的列表 -> 将列表的这种形式用树替代即可具体方法:涉及到更改父节点和子节点的关系,我们需要借助一个prev指针来记住父节点。第一个节点的记录最好用一个head,这样以来,prev原创 2021-04-05 12:15:12 · 131 阅读 · 0 评论 -
leetcode 865. 具有所有最深节点的最小子树
思路递归判断条件:如果左子树和右子树的高相等,说明当前root的这棵树就是答案如果左子树比右子树高,那么说明root和右子树的所有结点都不是答案,遍历左子树继续找如果右子树比左子树高,那么说明root和左子树的所有结点都不是答案,遍历右子树继续找代码class Solution {public: TreeNode* subtreeWithAllDeepest(TreeNode* root) { if(!root) return NULL;原创 2021-04-05 07:11:10 · 136 阅读 · 0 评论 -
leetcode 951. 翻转等价二叉树
思想题目中说了,只要经过一定次数的翻转操作后,能使二叉树 X 等于二叉树 Y,我们就称二叉树 X 翻转等价于二叉树 Y,所以不一定在每一个root都要进行翻转。上面的树的颜色分别代表递归思路(3)的①②③情况。标为黄色代表:root1root_1root1和root2root_2root2相比标为橘色代表以下两种情况都可以:left1left_1left1和left2left_2left2相比,right1right_1right1和right2right_2right2相比l原创 2021-04-04 10:32:59 · 108 阅读 · 0 评论 -
leetcode 889. 根据前序和后序遍历构造二叉树
思路之前已经写过了根据后序和中序遍历构造二叉树,同理,根据前序和中序遍历构造二叉树的题目也可以写了,所以我没再写一次思路。889这题和前面的思路本质上也没有差别,都是想方法把树分成根,左子树和右子树,再分别递归。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int原创 2021-04-02 08:53:44 · 119 阅读 · 0 评论 -
leetcode 116. 填充每个节点的下一个右侧节点指针
手写笔记这道题比较简单代码我自己的代码,最初没想明白怎么链接不同节点的子节点,比如:节点5和节点6如何链接,所以用了个复制queue的操作,增加了时间复杂度。看了官方题解发现小丑竟是我自己,根本就不用纠结这个,因为每一次pop都可以链接得上,而且最后一个节点时初始化就是NULL。/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next;原创 2021-04-01 11:47:57 · 73 阅读 · 0 评论 -
leetcode 979. 在二叉树中分配硬币
手写思路代码/** * 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), right(nullpt原创 2021-04-01 09:42:48 · 128 阅读 · 0 评论 -
LeetCode 1448. 统计二叉树中好节点的数目
手写思路这题中等难度,正确率好像70%+代码Talk is cheap, show me the code./** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * Tre原创 2021-03-31 09:11:56 · 132 阅读 · 0 评论 -
LeetCode 106. 从中序与后序遍历序列构造二叉树
前言复习完数据结构部分的主干知识,也忙完了pygame的project,是时候开搞算法题了!希望在多刷一些题目之后能总结一些经验出来。手绘思路代码Talk is cheap, show me the code!/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode()原创 2021-03-30 22:17:30 · 121 阅读 · 0 评论