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; ...
Day20 | 二叉树 二叉树所有路径&&左叶子之和
代码随想录 | Day20 | 二叉树:二叉树所有路径&&左叶子之和主要学习内容: 1.利用二叉树的谦虚遍历进行题目解答 2.to_string函数的使用 257.二叉树所有路径257. 二叉树的所有路径 - 力扣(LeetCode) 解法一:直接遍历本次使用的是前序遍历 1.函数参数和返回值 1void tra(string s,TreeNode *t) 如果不使用全局变量vector的话为 1void tra(vector<string>,string s,TreeNode...
LeetCode Hot100 | Day4 | 层序遍历&&有序数组转搜索树&&验证搜索树&&搜索树中第K小的元素
LeetCode Hot100 | Day4 | 层序遍历&&有序数组转搜索树&&验证搜索树&&搜索树中第K小的元素102.二叉树的层序遍历102. 二叉树的层序遍历 - 力扣(LeetCode) 完整代码: 123456789101112131415161718192021222324252627class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; queue<TreeNode*> q; if(root==nullptr) return res; q.push(root); while(!q.empty()) { int size=q.size(); ...