树
刷力扣题来学习掌握数据结构,与完整代码篇区分一下
never give-up
代码从入门到放弃
展开
-
12_二叉搜索树的范围和
简单通过这题能进一步学会怎么遍历二叉树/** * 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-04 14:48:49 · 124 阅读 · 0 评论 -
14_二叉树的锯齿形层序遍历
中等此题在13_的基础上变化了一下reverse虽然增加了O(n)的时间复杂度,但个人感觉比双端队列写法要简单一些些/** * 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-22 16:37:45 · 69 阅读 · 0 评论 -
13_从上到下打印二叉树
简单显然用层次遍历,层次遍历又叫广度优先搜索(BFS),也就是用队列的先入先出特点。class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { queue<TreeNode*> q; q.push(root); vector<vector<int>> res; while(q.size(原创 2020-12-22 15:29:12 · 65 阅读 · 1 评论 -
12_层数最深叶子节点的和
中等这题在引用值传递的时候要注意maxdep前面的&,否则maxdep在如下的写法中输出答案会存在问题/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */cla原创 2020-12-11 20:33:13 · 114 阅读 · 0 评论 -
11_最大二叉树
中等总时间复杂度为O(nlog n),最坏情况为O(n2),下面这种写法需要掌握,属于基础/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Soluti原创 2020-12-10 21:26:21 · 115 阅读 · 1 评论 -
10_找出克隆树中的相同节点
中等树的层序遍历还是要会的核心的部分就下面分别让左右节点进入队列,然后输出基本模板如下/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Soluti原创 2020-12-10 08:11:59 · 99 阅读 · 0 评论 -
9_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; childr原创 2020-12-08 21:51:38 · 90 阅读 · 1 评论 -
8_二叉搜索树的第k大节点
二叉搜索树/二叉查找树/二叉排序树:左根右依次递增,即中序遍历递增原创 2020-12-08 20:32:28 · 73 阅读 · 0 评论 -
7_二叉搜索树中的搜索
简单二叉树的一些知识 → 粗略看了一眼感觉还不错!须知:因为二叉搜索树的有序性,他的遍历方式比普通二叉树简单很多。针对二叉搜索树的题目,一定要利用其特性。这里摘录从某大佬那里看到的总结:「如果需要搜索整颗二叉树,那么递归函数就不要返回值,如果要搜索其中一条符合条件的路径,递归函数就需要返回值,因为遇到符合条件的路径了就要及时返回。」接下来依次是本题的递归法和迭代法。递归:最后如果都没有搜索到,就返回NULL。所以最后的return NULL别漏了!/** * Definition for原创 2020-12-07 20:32:45 · 72 阅读 · 0 评论 -
6_N叉树的后序遍历
简单LIFO:后进先出返回vector为空: return vector<int>(); 或 return {};(来自和rhb交流时候告诉我的)。增强for循环和普通for循环都写在了下面,可以对比学习/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val) { v原创 2020-12-04 17:51:18 · 114 阅读 · 0 评论 -
5_二叉树的最大深度
简单叶子节点:没有子节点的节点前面二叉树的题解中有类似的代码(我印象中是写过的),所以这边就一行解决了。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNod原创 2020-12-04 14:57:39 · 110 阅读 · 0 评论 -
4_合并二叉树
简单这个写法是我认为相对比较通俗易懂的一种写法,很好理解/** * 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: T原创 2020-12-03 21:37:35 · 144 阅读 · 0 评论 -
3_二叉树的镜像
简单交换二叉树的左右子树可以用以下方法/** * 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: TreeNode*原创 2020-12-03 21:12:26 · 57 阅读 · 0 评论 -
2_二叉树的深度
简单因为是要计算树的高度,我们采用后序遍历(左右中)/** * 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原创 2020-12-01 20:53:34 · 89 阅读 · 0 评论 -
1_最小高度树
class Solution {public:TreeNode* sortedArrayToBST(vector& nums) {return dfs(nums, 0, nums.size() - 1);}TreeNode* dfs(vector& nums, int l, int r) {if(l > r) return nullptr;int mid = l + r >> 1;TreeNode* root = new TreeNode(nums[mid]原创 2020-12-01 20:27:32 · 129 阅读 · 0 评论