
Leetcode二叉树专题
Leetcode二叉树专题
SL_World
中国科学院大学计算机应用技术专业在读研究生
展开
-
Leetcode|二叉树的属性DFS回溯|113. 路径总和 II
1 DFS回溯/** * 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-08-30 15:03:31 · 209 阅读 · 0 评论 -
Leetcode|BFS每层最后1个节点|199. 二叉树的右视图
1 BFS每层最后1个节点添加到解中思路: 利用 BFS 进行层次遍历,记录下每层的最后一个元素class Solution {public: vector<int> rightSideView(TreeNode* root) { if (!root) return {}; vector<int> res; queue<TreeNode*> q; q.push(root); .原创 2021-07-17 23:45:41 · 251 阅读 · 1 评论 -
Leetcode|BFS+双端队列|103. 二叉树的锯齿形层序遍历
1 BFS + 双端队列/** * 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-07-13 23:25:15 · 165 阅读 · 0 评论 -
Leetcode|二叉树的修改与构造|从前中|后中|前后遍历序列构造二叉树
文章目录一、前序+中序1.1 递归(哈希表优化)二、后序+中序2.1 递归(未优化)2.2 递归(哈希表优化)三、前序+后序3.1 递归(哈希表优化)一、前序+中序1.1 递归(哈希表优化)class Solution {private: unordered_map<int, int> val2idx; int preIdx = 0;public: TreeNode* traverse(vector<int>& preorder, vect原创 2021-04-16 12:59:30 · 172 阅读 · 0 评论 -
Leetcode|BST属性|538/1038. 把BST转换为累加树(反中序遍历)
1 反中序递归/** * 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(null..原创 2021-03-10 11:12:02 · 149 阅读 · 0 评论 -
Leetcode|BST属性|501. BST中的众数(BST中序遍历=升序数组)
1 递归—中序遍历【极端情况】:BST树中所有节点唯一,则所有节点均是众数/** * 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 {pr.原创 2021-03-09 23:48:30 · 173 阅读 · 0 评论 -
Leetcode|BST属性|530. BST最小绝对差(BST中序遍历=升序数组)
1 递归中序遍历【BST的重要属性之一】:BST中序遍历 = 升序数组/** * 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 {priv.原创 2021-03-09 20:28:46 · 199 阅读 · 0 评论 -
Leetcode|BST属性|98. 验证BST(每个节点需在区间中)
1 递归【确定BST正确性必要条件】:需已知当前节点的父节点和祖父节点,才能准确固定区间技巧1:将相邻3个节点的树指针作为参数传递,避免数据类型错误,比如节点值是long,但传入的是int技巧2:使用左右两个父节点命名参数,若其中一个是父节点,则另一个必为祖父节点/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode.原创 2021-03-09 17:27:24 · 225 阅读 · 0 评论 -
Leetcode|BST属性|700. BST搜索
注意格式最好写成if..else if而不是if...ifif (val < root->val) {...}else if (val > root->val) {...}否则,容易将上一个if改变后的root代入到下一个if中if (val < root->val) {...}if (val > root->val) {...}1 DFS/** * Definition for a binary tree node. * struc.原创 2021-03-09 15:38:32 · 147 阅读 · 0 评论 -
Leetcode|二叉树的属性|110. 平衡二叉树
1 DFS/** * 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(nullptr..原创 2021-03-09 15:15:58 · 152 阅读 · 0 评论 -
Leetcode|二叉树的属性|513. 找树左下角的值
1.1 DFS注意审题:是树最后一层最左边的值,不一定得是左叶子!因此只要从左至右深搜找到的第一个最深的节点即为该节点/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * .原创 2021-03-09 15:06:54 · 118 阅读 · 0 评论 -
Leetcode|二叉树的属性|404. 左叶子之和
1 递归【解题要点】:需要通过节点的父节点来判断其左孩子是不是左叶子【考核技能】:无父指针的树结构对于父节点操作的应用/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; .原创 2021-03-09 12:41:31 · 168 阅读 · 0 评论 -
Leetcode|二叉树的属性|222. 完全二叉树的节点个数
文章目录0 初始思路(DFS)0.1 90%DFS—O(n)O(n)O(n)0.2 100%DFS—O(n)O(n)O(n)1 位运算 + 运用满二叉树性质快速遍历致谢0 初始思路(DFS)0.1 90%DFS—O(n)O(n)O(n)初看题目,直接思路就是按完全二叉树的性质分两种情况讨论二叉树是满二叉树(最后一层叶节点没有缺失)二叉树是非满二叉树(最后一层右侧集中缺失若干叶节点)但当初没有往深想,只是简单判断整个树若是满二叉树,则用公式2h−12^h - 12h−1来求,其余情况又是时原创 2021-03-09 10:15:47 · 161 阅读 · 0 评论 -
Leetcode|BST修改与构造|669. 修剪二叉搜索树
1 递归注意,这里的核心思路不是剪枝或者显示删除每个不符合条件的节点。而是通过找到符合条件的节点或者子树,然后把符合条件的拼接到一起,从而间接达到修剪的目的。根据BST性质,左必然小,右必然大,因此可以先通过节点的值比较找到符合[low, high]区间的节点,然后把两两符合条件的节点进行连接,从而间接移除了不符合条件的节点。/** * Definition for a binary tree node. * struct TreeNode { * int val; * ...原创 2021-03-08 23:22:49 · 146 阅读 · 0 评论 -
Leetcode二叉树专题模板积累
1 BFS适用场景:有固定初始树节点的路径搜索问题,当已知固定终点时可用双向BFS进行优化void bfs(TreeNode* start, TreeNode* target) { // 1.初始化队列+记录 queue<TreeNode*> q; set<TreeNode*> visited; // 避免走回头路 q.push(start); visited.add(start); int step = 0; // 记录步数 while (原创 2021-03-02 21:21:23 · 245 阅读 · 0 评论 -
Leetcode|BST修改与构造|450. 删除BST中的节点
1 BST删除节点/** * 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(null.原创 2021-03-08 20:22:58 · 226 阅读 · 0 评论 -
Leetcode|BST修改与构造|701. BST的插入操作
1 递归/** * 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(nullptr)..原创 2021-03-08 15:55:24 · 172 阅读 · 0 评论 -
Leetcode|二叉树的修改与构造|654. 最大二叉树
1 递归(未优化)/** * 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(nu...原创 2021-03-08 11:17:14 · 137 阅读 · 0 评论 -
Leetcode|二叉树的遍历方式|144/94/145.二叉树的前序/中序/后序遍历[迭代版]
文章目录问题描述一、二叉树的前序迭代遍历二、二叉树的中序迭代遍历三、二叉树的后序迭代遍历四、运行结果问题描述递归版请见:Leetcode|二叉树的遍历方式|144/94/145.二叉树的前序/中序/后续遍历[递归版]这里仅提供前序的截图,中序和后序问题大家都懂,就不赘述了一、二叉树的前序迭代遍历class Solution {public: vector<int> preorderTraversal(TreeNode* root) { if (!root)原创 2021-03-07 17:48:39 · 286 阅读 · 0 评论 -
Leetcode|二叉树的遍历方式|144/94/145.二叉树的前序/中序/后序遍历[递归版]
文章目录问题描述一、二叉树的前序递归遍历二、二叉树的中序递归遍历三、二叉树的后序递归遍历四、运行结果问题描述这里仅提供前序的截图,中序和后序问题大家都懂,就不赘述了一、二叉树的前序递归遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), le原创 2021-03-07 16:21:41 · 189 阅读 · 0 评论 -
Leetcode|二叉树的遍历方式|102. 二叉树的层序遍历
BFS/** * 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(nullptr) {.原创 2021-03-05 21:42:52 · 157 阅读 · 0 评论 -
Leetcode|二叉树的修改与构造|617. 合并二叉树
【解题思路】:选择其中一棵树(如左边root1的树)作为最终输出的树,然后将另外一棵树叠加到这棵树上。【注意事项】:遍历到输出树root1节点为空,而叠加树root2节点非空时,直接把root2作为root1即可,但需要额外传参才能完成root1的父节点;root1是父节点的左子树还是右子树DFS/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *lef.原创 2021-03-05 14:35:11 · 178 阅读 · 0 评论 -
Leetcode 树-100. 相同的树
1 DFS/** * 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(nullptr..原创 2021-03-04 23:36:14 · 174 阅读 · 1 评论 -
Leetcode|二叉树公共祖先|235. 二叉树+BST最近公共祖先
1 通用二叉树的最小公共祖先这里我先按照通用二叉树下的最小公共祖先来做,此处的难点在于函数lowestCommonAncestor的非空返回值一语双关,有两个含义,想清楚这个就好coding了①p和q的最近公共祖先②p或q单个节点的祖先/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * .原创 2021-03-04 21:42:59 · 147 阅读 · 1 评论 -
Leetcode|二叉树的属性|111. 二叉树的最小深度
1 BFS(在最小深度问题上不用遍历所有树节点)/** * 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(nullp.原创 2021-03-04 17:27:23 · 118 阅读 · 1 评论 -
Leetcode|二叉树的属性|257. 二叉树的所有路径
1 DFS/** * 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(nullptr).原创 2021-03-04 17:02:22 · 117 阅读 · 1 评论 -
C++ 11字符数组/字符串/数字转换/字符串拼接
一、数字转字符串头文件#include<string>#include<typeinfo>1.1 int型数字转字符串int num = 123;string num2str = to_string(num);cout << typeid(to_string(num) == typeid(string) << endl; // true1.2 float/double型数字转字符串(不补0)头文件#include<sstream原创 2021-03-04 16:18:00 · 4308 阅读 · 2 评论 -
Leetcode|二叉树的修改与构造|226. 翻转二叉树
1 分治法-递归/** * 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-03-03 21:47:19 · 148 阅读 · 1 评论 -
Leetcode|BST修改与构造|108. 将有序数组转换为BST
分治法-递归/** * 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-03-03 19:10:51 · 183 阅读 · 3 评论 -
Leetcode|二叉树的属性|104. 二叉树的最大深度
1 DFS/** * 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(nullptr).原创 2021-03-03 15:41:39 · 140 阅读 · 2 评论 -
Leetcode|二叉树的属性|101. 对称二叉树
1 分治法-递归/** * 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-03-03 14:52:33 · 111 阅读 · 0 评论 -
Leetcode|二叉树的属性|112. 路径总和
BFS解法/** * 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(nullptr..原创 2021-03-03 10:14:44 · 253 阅读 · 0 评论 -
Leetcode 树-543-二叉树的直径
DFS解法/** * 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 {private: int max_len = 0;publi.原创 2021-03-03 09:58:05 · 139 阅读 · 0 评论