Day25 | 二叉树 从中序与后序遍历构造二叉树&&最大二叉树
代码随想录 | Day25 | 二叉树:从中序与后序遍历构造二叉树&&最大二叉树主要学习内容:用中序和后序来构建二叉树 106.从中序与后序遍历构造二叉树106. 从中序与后序遍历序列构造二叉树 - 力扣(LeetCode) 解法思路:先想想如果没有这个图的话,我们会如何把根据这两个数组把树画出来。 1.中序是左中右,后序是左右中,说明后序数组的末尾肯定是当前还没构造的部分的根结点 2.接下来再根据这个值去中序里面找,找到的话,那它的前面就是左子树,后面就是右子树 3.根据中序数组左子树结点数量,可以确定后序数组中左右的分界,这样就找到了中序和后序数组中,左子树和右子树的范围 4.也就是分别找到了左子树和右子树他们自己的中序和后序数组 5.递归左子树和右子树的中序后序数组,建立左右子树,知道整棵树构建完毕 比如下面,这张图的构造过程 1.先找到根结点3 2.3前面是左子树9,后面是右子树15,20,7 3.左子树大小为1说明,后序数组前面1个数是左子树,到末尾的根结点前是右子树15,7,20 4.左子树中序 :9 后序:9 右子树中序 :15 20 7 ...
Day24 | 二叉树 二叉树的公共祖先(有个自己的想法)&&二叉搜索树的公共祖先
代码随想录 | Day24 | 二叉树:二叉树的公共祖先(有个自己的想法)&&二叉搜索树的公共祖先主要学习内容: 1.一般需要向上返回下层结点的内容信息或者判断结果的话都是后序遍历 2.二叉搜索树的性质:左右子树和根结点的大小关系 236.二叉树的最近公共祖先236. 二叉树的最近公共祖先 -...
Day23 | 二叉树 二叉搜索树的最小绝对差&&二叉搜索树中的众数
代码随想录 | Day23 | 二叉树:二叉搜索树的最小绝对差&&二叉搜索树中的众数主要学习内容: 1.二叉搜索树性质:中序遍历是递增的有序序列 2.自定义pair排序函数复习 3.双指针在二叉树中的应用(重点) 530.二叉搜索树的最小绝对差530. 二叉搜索树的最小绝对差 - 力扣(LeetCode) 解法:利用二叉搜索树性质进行中序遍历**思路:**总的思路是二叉搜索树的中序遍历是一个递增的有序序列,可以把它看成一个数组。 那么就有了两个思路 1.把遍历的数全都存到一个数组中,然后循环,看相邻两个数的差的大小,记录最小值就是了 2.在遍历的过程中想办法把前一个结点的值给记下来,然后根据遍历顺序进行相减得到最后的结果。可以利用双指针来记录前一个节点 在这里介绍第二种 1.函数参数和返回值 123int minVal=INT_MAX;TreeNode *pre=nullptr;void tra(TreeNode...
Redis
Redis基础一.初始Redis1.1SQL 和 NoSql的区别1.1.1结构化和非结构化 (1) SQL关系性数据库 传统关系型数据库是结构化数据,每一张表都有严格的约束信息:字段名、字段数据类型、字段约束等等信息,插入的数据必须遵守这些约束 (2) NoSql数据库 NoSql对数据库格式没有严格约束,往往形式松散,自由。 可以是key-value,可以是文档,或者图格式 1.1.2关联和非关联 (1) 关系型数据库 (2) 非关系型数据库 12345678910111213141516171819{ id: 1, name: "张三", orders: [ { id: 1, item: { id: 10, title: "荣耀6", price: 4999 } }, { id: 2, item: { id: 20, title:...
LeetCode Hot100 | Day7 | 路径总和III
LeetCode Hot100 | Day7 | 路径总和III看路径总和III之前先看112. 路径总和 - 力扣(LeetCode) 123456789101112131415161718192021class Solution {public: bool flag=false; void tra(TreeNode *t,int target) { if(t==nullptr) return ; target-=t->val; if(t->left==nullptr&&t->right==nullptr) { if(target==0) flag=true; } tra(t->left,target); tra(t->right,target); } bool...
Day22 | 二叉树 二叉搜索树中的搜索&&验证二叉搜索树
代码随想录 | Day22 | 二叉树:二叉搜索树中的搜索&&验证二叉搜索树主要学习内容: 二叉搜索树的性质:中序遍历是递增序列 700.二叉搜索树中的搜索700. 二叉搜索树中的搜索 - 力扣(LeetCode) 解法:二分查找**思路:**如果当前结点t->val大于val就去遍历左子树 如果小于就去遍历右子树 找到了就返回当前结点就是了 1.函数参数和返回值 1TreeNode* tra(TreeNode *t,int val) t为当前节点,val为目标值 2.终止条件 12if(t==nullptr || t->val==val) return t; 为空或者找到了都是返回本身 3.本层代码逻辑 其实就是二分查找的三种情况,找到了答案和大于小于搜索值 这三种情况也是互斥的,遍历左子树以后就不会去遍历右子树 123456if(t==nullptr || t->val==val) return t;else if(t->val>val) return...
侯捷 C++ STL标准库和泛型编程 | 学习笔记
侯捷 C++ STL标准库和泛型编程 | 学习笔记1 STL概述STL —— Standard Template Library,标准模板库 C++ Standard LIbrary,C++标准库中包含STL(即STL+一些小东西) 1.1 头文件名称 C++标准库的 header files 不带 .h,例如:#include<vector> 新式 C header files 不带 .h,例如:#include<cstdio> 老式 C header files 带 .h 仍然可用,例如:#include<stdio.h> 新式 header 内的组件封装于 namespace std 老式 header 内的组件不封装于 namespace std 1.2...
LeetCode Hot100 | Day6 | 从前序和中序数组构建二叉树
LeetCode Hot100 | Day6 | 从前序和中序数组构建二叉树从前序和中序数组构建二叉树105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode) 1234567891011121314151617181920class Solution {public: TreeNode *tra(vector<int> preorder, vector<int> inorder) { if(preorder.size()==0) return nullptr; int val=preorder[0]; TreeNode* t=new TreeNode (val); int index=0; for(index=0;index<inorder.size();index++) if(val==inorder[index]) break; ...
Day21 | 二叉树 找树左下角的值&&路径总和
代码随想录 | Day21 | 二叉树:找树左下角的值&&路径总和主要学习内容: 1.利用二叉树的谦虚遍历进行题目解答 2.to_string函数的使用 513.找树左下角的值513. 找树左下角的值 - 力扣(LeetCode) 解法一:回溯思路: 难突破的点是我们怎么知道我们找的叶子结点是最左边的 其实只需要一直往下遍历,每一层最先遍历到的肯定是左边的 那如何知道是最下面的呢? 深度最深才能是最下面的 所以我们的目标就是找深度最深的叶子结点,保存第一个遍历到的深度最深的结点。这就是我们的答案 1.函数参数和返回值 1234int res;int curdepth=0;void tra(TreeNode *t,int...
LeetCode Hot100 | Day5 | 二叉树右视图&&二叉树展开为链表
LeetCode Hot100 | Day5 | 二叉树右视图&&二叉树展开为链表199.二叉树的右视图199. 二叉树的右视图 - 力扣(LeetCode) 完整代码: 1.递归遍历来自于灵神的题解,我仅仅是看懂 遍历顺序:中右左,因为收集的是右视图,我们要收集最右边的,先递归右子树,保证首次遇到的一定是最右边的,有人可能会好奇,这样的话,遍历左子树的时候会有不符合条件的答案进去,深度就是解决这个问题的 关键点: 深度首次遇到才会记录答案,这样避免了递归完右子树重新从根节点路过递归遍历左子树的时候,路过的重复深度的树层的树 这个在遍历完右子树后,如果左子树还有比右子树深度大的才会进入答案 123456789101112131415161718192021class Solution { vector<int> ans; void dfs(TreeNode* node, int depth) { if (node == nullptr) { return; ...














