
树
cx_cs
这个作者很懒,什么都没留下…
展开
-
199. 二叉树的右视图
无原创 2023-03-07 10:40:30 · 44 阅读 · 0 评论 -
173. 二叉搜索树迭代器
无原创 2023-03-07 11:10:39 · 42 阅读 · 0 评论 -
129. 求根节点到叶节点数字之和
无原创 2023-03-07 11:30:21 · 47 阅读 · 0 评论 -
117. 填充每个节点的下一个右侧节点指针 II
无原创 2023-03-09 10:55:43 · 78 阅读 · 0 评论 -
113. 路径总和 II
无原创 2022-08-19 11:24:25 · 55 阅读 · 0 评论 -
107. 二叉树的层序遍历 II
无原创 2022-08-19 11:21:43 · 55 阅读 · 0 评论 -
106. 从中序与后序遍历序列构造二叉树
无原创 2022-08-19 11:17:56 · 106 阅读 · 0 评论 -
99. 恢复二叉搜索树
无原创 2022-08-19 10:15:18 · 54 阅读 · 0 评论 -
116. 填充每个节点的下一个右侧节点指针
要求:把每层用next指针连起来,空间O(1)思路:每层都从最左边的开始,左孩子指右孩子,右孩子指next的左孩子/*// 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) : va原创 2022-04-05 10:42:52 · 106 阅读 · 0 评论 -
102. 二叉树的层序遍历
要求:记录每一层思路:简单/** * 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(原创 2022-04-05 10:11:01 · 65 阅读 · 0 评论 -
124. 二叉树中的最大路径和
要求:不一定从根出发思路:跟687有点像,递归返回的是单侧的,最大值中间已经计算了/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : v原创 2022-03-21 14:22:08 · 61 阅读 · 0 评论 -
114. 二叉树展开为链表
要求:按前序拆成链表思路:错误示范:访问2左二子3时已经把2右儿子4改成3了,4丢了class Solution {public: TreeNode* pre; void preorder(TreeNode* root){ pre->right=root;//可能还会回到pre右儿子这里不能改 pre=root; if(root->left)preorder(root->left); if(root-&原创 2022-03-21 14:05:22 · 799 阅读 · 0 评论 -
98. 验证二叉搜索树
要求:rt思路:法一:递归,右子树范围在(根,inf),左子树范围在(-inf,根),注意下一个递归就不是inf了,比如5右儿子8,8左儿子7,应该验证7范围在(5,8)/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr),原创 2022-03-21 10:51:24 · 113 阅读 · 0 评论 -
96. 不同的二叉搜索树
要求:1-n思路:分左右推导。https://leetcode-cn.com/problems/unique-binary-search-trees/solution/bu-tong-de-er-cha-sou-suo-shu-by-leetcode-solution/class Solution {public: int numTrees(int n) { vector<int> G(n + 1, 0); G[0] = 1; G[1原创 2022-03-20 21:52:22 · 94 阅读 · 0 评论 -
剑指 Offer 54. 二叉搜索树的第k大节点
要求:rt思路:右根左/** * 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 ans; void原创 2022-03-09 17:07:30 · 60 阅读 · 0 评论 -
剑指 Offer 37. 序列化二叉树
要求:rt思路:法一:bfs,出队时如果是空的就加null,非空的加值还要入队左右孩子。反序列化时入队,遍历字符串挂上去,不是null再入队/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL)原创 2022-03-06 12:37:15 · 235 阅读 · 0 评论 -
剑指 Offer 36. 二叉搜索树与双向链表
要求:按中序调整指针双向链表思路:加全局pre/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node() {} Node(int _val) { val = _val; left = NULL; right = NULL; } Node(int _val, Node* _le原创 2022-03-05 22:15:30 · 138 阅读 · 0 评论 -
剑指 Offer 34. 二叉树中和为某一值的路径
要求:从根开始思路:坑点:和可以负数/** * 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原创 2022-03-05 18:35:58 · 227 阅读 · 0 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III
要求:之字形思路:法一:普通队列+翻转v,或者双端队列/** * 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: v原创 2022-03-05 11:11:54 · 51 阅读 · 0 评论 -
剑指 Offer 32 - II. 从上到下打印二叉树 II
要求:层序遍历思路:/** * 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: vector<vector<原创 2022-03-05 10:14:01 · 169 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构
要求:b树是不是a树一部分思路:有个坑就是遍历时候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 Solution {public:原创 2022-03-04 19:08:50 · 113 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树
要求:前序中序建树思路:必然要有四个下标,递归。可以加一个哈希表存中序根hash[in[i]]=i。迭代法太复杂且不通用/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; *原创 2022-02-28 19:13:04 · 142 阅读 · 0 评论 -
677. 键值映射
要求:前缀树,输入前缀求和,每个字符串有个int映射思路:最简单当然是搞个map[string]=int了,这里用字典树,isend用映射int代替了不为0表示结尾,求和时简单遍历前缀,队列层序,注意本题有的字符串是别的字符串的前缀class MapSum {private: int val; MapSum* next[26];public: MapSum() { val=0; memset(next,0,sizeof(next));原创 2022-01-03 21:13:58 · 206 阅读 · 0 评论 -
208. 实现 Trie (前缀树)
要求:前缀树是指节点为一个字母,用来存字符串的,根什么也不放思路:正常多叉树每个节点包含值和指向儿子们的指针数组,但是前缀树节点包含的是指向孩子的指针数组,因为只有26个字母可以去掉值了,还有布尔变量表示该节点是否为字符串结尾不然的话就得扫描一遍儿子数组才能判断class Trie {private: bool isEnd; Trie* next[26];public: Trie() { isEnd=false; memset(next,0,s原创 2022-01-03 20:30:58 · 87 阅读 · 0 评论 -
501. 二叉搜索树中的众数
要求:可能有多个,不能用额外空间思路:边中序边更新/** * 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(null原创 2022-01-01 12:34:46 · 217 阅读 · 0 评论 -
530. 二叉搜索树的最小绝对差
要求:rt思路:/** * 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(nullp原创 2022-01-01 12:15:47 · 177 阅读 · 0 评论 -
653. 两数之和 IV - 输入 BST
要求:rt思路:/** * 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(nullp原创 2022-01-01 12:06:03 · 138 阅读 · 0 评论 -
109. 有序链表转换二叉搜索树
要求:rt法一:可以先把链表输到数组里然后根上题一样,但耗空间法二:每次都用快慢指针取链表中点,但耗时间法三:可以先建好节点不赋值,按中序遍历赋值/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x),原创 2022-01-01 11:56:53 · 427 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
要求:平衡、二叉搜索树思路:从中间建树/** * 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),原创 2022-01-01 11:25:33 · 206 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
要求:rt法一:有两种情况,一是分在两边(公共祖先不是pq),一是在一边(祖先为p或q),具体一点,一是左右子树分别包含pq(这样的点是唯一的),二是若左子树包含pq并且左节点不是pq则往左遍历,如果是pq则直接返回左节点,右边同理法二:map记录每个节点的祖先,再从pq遍历回去第一个重复的...原创 2022-01-01 10:53:57 · 201 阅读 · 0 评论 -
235. 二叉搜索树的最近公共祖先
要求:rt思路:首先这是bst,可以利用性质,若为祖先则必在pq之间,可据此走左右两边,然后第一个找到的就是,为什么?因为在pq之间的形状是^,而是公共祖先的只有顶点/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL),原创 2021-12-29 12:33:55 · 208 阅读 · 0 评论 -
538. 把二叉搜索树转换为累加树
要求:rt思路:把大于等于该节点的和赋给该节点,即把右子树加上来,反向中序遍历即可/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : v原创 2021-12-29 12:10:07 · 296 阅读 · 0 评论 -
230. 二叉搜索树中第K小的元素
要求:rt思路:中序遍历/** * 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(n原创 2021-12-29 11:46:51 · 60 阅读 · 0 评论 -
669. 修剪二叉搜索树
要求:s要求删去区间外的节点思路:搜索树指根大于左子树所有小于右子树。如果一个节点小于low,那么其左边必然丢掉,让右边递归代替;反之大于的话左边递归代替;如果在区间内,则直接处理左右节点/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(n原创 2021-12-29 11:32:19 · 228 阅读 · 0 评论 -
145. 二叉树的后序遍历
要求:迭代思路:先序遍历是中左右,后续遍历是左右中,那么我们只需要调整一下先序遍历的代码顺序,就变成中右左的遍历顺序,然后在反转vector数组,输出的结果顺序就是左右中了/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr),原创 2021-12-25 11:15:40 · 66 阅读 · 0 评论 -
94. 二叉树的中序遍历
要求:迭代思路:找到最左下才开始左中右,每个节点都要左中右,往左时入栈。/** * 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)原创 2021-12-13 12:21:35 · 686 阅读 · 0 评论 -
144. 二叉树的前序遍历
要求:不用递归思路:要用栈,模拟递归调用栈,出栈时打印,因为先访问左子树,所以右子树先进栈/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x)原创 2021-12-13 11:40:24 · 61 阅读 · 0 评论 -
513. 找树左下角的值
要求:首先最底层,其次最左边思路:层序,可以记录每层个数找到最后一层第一个,也可以把层序改成从右到左,这样最后一个就是答案/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} *原创 2021-12-13 11:12:37 · 459 阅读 · 0 评论 -
637. 二叉树的层平均值
要求:如题思路:/** * 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(nullp原创 2021-12-13 11:02:34 · 1198 阅读 · 0 评论 -
671. 二叉树中第二小的节点
要求:根等于两孩子的最小值,且根只能有0或2个孩子思路:明显往下是越来越大的/** * 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(原创 2021-12-11 14:29:38 · 487 阅读 · 0 评论