自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 学习前端day01

1. 数组介绍 - 有序的数据集合 - var arr = [] - var arr = new Array(5) + [,,,,,] 2. 数组特性,及案例 - 长度和索引 + 长度 - 1 == 数组索引最大值 3. 数组排序算法--冒泡 4. 数组排序算法--选择 5. 二维数组

2023-03-22 11:28:59 566

原创 day02的前端学习

1. 数组常见API方法1 2. 数组塌陷 3. 数组常见API方法2 4. 数组去重问题 5. 数组常见API方法3 6. 回调函数 7. 重构数组遍历方法 8. 数组的排序算法--计数 9. 数组的排序算法--插入 10. 数组的排序算法--快排

2023-03-22 11:07:45 282

原创 538. 把二叉搜索树转换为累加树

538.把二叉搜索树转换为累加树class Solution {public: int pre;//记录前一个节点的数值 TreeNode* convertBST(TreeNode* root) { pre=0; traversal(root); return root; } void traversal(TreeNode*root)//累加树的结构就是右子树不变 中间结点加上右子树 左子树加上中间结点再加上右子树(加上的中间结点是改变

2021-02-06 10:00:19 64

原创 108. 将有序数组转换为二叉搜索树

108. 将有序数组转换为二叉搜索树class Solution {public: TreeNode* sortedArrayToBST(vector<int>& nums) { return traversal(nums,0,nums.size()-1); } TreeNode* traversal(vector<int>& nums,int l,int r) { if(l>r) return NU

2021-02-03 14:27:00 58

原创 删除二叉搜索树中的节点

删除二叉搜索树中的节点class Solution {public: TreeNode* deleteNode(TreeNode* root, int key) { if(root==NULL) return root;//第一种情况没找到删除的结点遇到空节点直接返回 if(root->val==key)//当结点存在的时候 { //第二种情况左右孩子为空,该节点为叶子节点直接删除返回NULL if(roo

2021-01-31 07:29:17 112

原创 二叉搜索树的插入操作

二叉搜索树的插入操作class Solution {public: TreeNode* insertIntoBST(TreeNode* root, int val) { if(root==NULL) { TreeNode*node=new TreeNode(val);//如果这个结点为空然后插入结点位置 return node; } if(root->val>val) root->l

2021-01-31 07:00:26 93

原创 二叉搜索树的最近公共祖先

二叉搜索树的最近公共祖先和二叉树的公共祖先不一样的是搜索树有顺序可以直接按照顺序搜class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { return traversal(root,p,q); } TreeNode*traversal(TreeNode*root,TreeNode*p,TreeNode*q

2021-01-31 06:44:36 47

原创 二叉树的最近公共祖先

二叉树的最近公共祖先class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { return traversal(root,p,q); } TreeNode* traversal(TreeNode*root,TreeNode*p,TreeNode*q) { if(root==q||root==p||roo

2021-01-28 10:09:13 48

原创 二叉搜索树中的众数

二叉搜索树中的众数这个如果是普通树的话用map统计然后转换成vector进行排序// map<int, int> key:元素,value:出现频率void searchBST(TreeNode* cur, unordered_map<int, int>& map) { // 前序遍历 if (cur == NULL) return ; map[cur->val]++; // 统计元素频率 searchBST(cur->left, m

2021-01-26 14:19:13 48

原创 二叉搜索树的最小绝对差值

二叉搜索树的最小绝对差值public: vector<int>ans; int getMinimumDifference(TreeNode* root) { getgroup(root); int res=INT_MAX;//力扣中的无穷大表示 for(int i=1;i<ans.size();i++) { res=min(res,ans[i]-ans[i-1]);//反正是有序的就取邻近的就行了 } ret

2021-01-26 11:26:51 49

原创 验证二叉搜索树

验证二叉搜索树这个题容易有陷阱直接进行以下操作if(root->val > root->left->val && root->val < root->right->val) return true我们要比较的是 左子树所有节点小于中间节点,右子树所有节点大于中间节点。举例子这个是错的因为6比10小所以上面的代码逻辑是错误的正确的应该按照搜索树的特点转换成一个有序的数组然后根据数组进行判断class Solution {pu

2021-01-26 10:57:14 44

原创 188.武士风度的牛

188.武士风度的牛总结:先找到进入floodfill的条件然后加入把起点加入队列并进行标记只要队列不空就对格子进行扩展(要除去自己因为自己已经被覆盖过了)然后判定是否有效(是否超出范围,是否已经覆盖或者是石头)把扩展的点加入队列并进行标记然后从已经加入的队列里的数随机选一个再次进行扩展就是不只是四个方向走的是一个日字#include<iostream>#include<cstring>using namespace std;const int N=155;

2021-01-25 22:42:45 83

原创 acwing1076迷宫问题

给定一个 n×n 的二维数组,如下所示:int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。数据保证至少存在一条从左上角走到右下角的路径。输入格式第一行包含整数 n。接下来 n 行,每行包含 n 个整数 0 或 1

2021-01-25 21:35:30 48

原创 acwing 1106山峰和山谷

acwing 1106山峰和山谷总结:先找到进入floodfill的条件然后加入把起点加入队列并进行标记只要队列不空就对格子进行扩展(要除去自己因为自己已经被覆盖过了)然后判定是否有效(是否超出范围,是否已经覆盖或者是石头)把扩展的点加入队列并进行标记然后从已经加入的队列里的数随机选一个再次进行扩展#include<iostream>using namespace std;const int N=1010;#define x first#define y secondt

2021-01-25 21:06:35 75 1

原创 acwing 1098城堡问题

acwing 1098城堡问题总结:先找到进入floodfill的条件然后加入把起点加入队列并进行标记只要队列不空就对格子进行扩展(要除去自己因为自己已经被覆盖过了)然后判定是否有效(是否超出范围,是否已经覆盖或者是石头)把扩展的点加入队列并进行标记然后从已经加入的队列里的数随机选一个再次进行扩展本题与池塘的区别就是输入数据有点复杂但是用二进制就可以很好的判别是否有墙汝西1北2东4南811的话就是1+2+8 1011发现三面都有墙#include<iostream>#

2021-01-25 20:43:51 96

原创 池塘计数floodfill

池塘计数Flood fill算法:从一个起点开始,然后每一次随机选一个新加入的格子看周围能不能扩展新的格子,如果能的话就把他扩展进来,直到不能扩展新的格子为止。需要判重,同样一个格子只能覆盖一次可以在线性时间复杂度内,找到某个点所在的连通块(找连通块)宽搜和深搜都可以实现,深搜可能发生爆栈总结:先找到进入floodfill的条件然后加入把起点加入队列并进行标记只要队列不空就对格子进行扩展(要除去自己因为自己已经被覆盖过了)然后判定是否有效(是否超出范围,是否已经覆盖或者是石头)把扩展的点

2021-01-25 08:03:53 167

原创 二叉搜索树中的搜索

二叉搜索树中的搜索刚开始写的时候没有返回搜索左子树和右子树只是遍历了然后返回根节点这样的话结果就是最开始那个root了因为左右子树搜到的结点没有返回class Solution {public: TreeNode* searchBST(TreeNode* root, int val) { if(root==NULL) return NULL; if(root->val==val) return root; if(root->val>v

2021-01-25 06:50:46 57

原创 合并二叉树

合并二叉树刚开始我还以为是合并连通块来着无语子TreeNode *root=new TreeNode(0);//重新定义节点这里面的0应该是值class Solution {public: TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { if(t1==NULL&&t2==NULL) return NULL; else if(t1==NULL) return t2; else if(t2==NULL

2021-01-25 06:34:16 62

原创 最大二叉树

最大二叉树这个题与105,106的区别就是只有一个数组但是也可以构造因为根节点是找最大的然后进行划分所以不需要像之前那样两个数组来确定根节点然后划分class Solution {public: TreeNode* constructMaximumBinaryTree(vector<int>& nums) { return traversal(nums,0,nums.size()); } TreeNode*traversal(vector&lt

2021-01-25 06:12:11 74

原创 105. 从前序与中序遍历序列构造二叉树

105. 从前序与中序遍历序列构造二叉树这个题分几步走:第一步:如果数组大小为零的话,说明是空节点了。第二步:如果不为空,那么取后序数组最后一个元素作为节点元素。第三步:找到后序数组最后一个元素在中序数组的位置,作为切割点第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)第五步:切割后序数组,切成后序左数组和后序右数组第六步:递归处理左区间和右区间class Solution {public: TreeNode* buildTree(vector

2021-01-24 14:31:51 55

原创 从中序与后序遍历序列构造二叉树

从中序与后序遍历序列构造二叉树这个题分几步走:第一步:如果数组大小为零的话,说明是空节点了。第二步:如果不为空,那么取后序数组最后一个元素作为节点元素。第三步:找到后序数组最后一个元素在中序数组的位置,作为切割点第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)第五步:切割后序数组,切成后序左数组和后序右数组第六步:递归处理左区间和右区间class Solution {public: TreeNode* buildTree(vector<i

2021-01-24 13:46:18 127

原创 路径总和

路径总和class Solution {public: vector<vector<int>>result; vector<int>path; vector<vector<int>> pathSum(TreeNode* root, int targetSum) { if(root==NULL) return result; path.push_back(root->val); retu

2021-01-23 07:16:59 43

原创 路径总和

路径总和如果遍历的是整棵树就不需要返回值这里是找路径所以要返回class Solution {public: bool hasPathSum(TreeNode* root, int targetSum) { if(root==NULL) return false; return traversal(root,targetSum-root->val);//不要忘记减去根节点的值 } bool traversal(TreeNode *c

2021-01-23 06:56:57 40

原创 找树左下角的值

找树左下角的值这个题告诉我我层序遍历又差不多忘记了class Solution {public: int findBottomLeftValue(TreeNode* root) { queue<TreeNode *>que; int result=0; if(root!=NULL) que.push(root); while(!que.empty()) { int s=que.size(); for(int i

2021-01-23 06:37:18 38

原创 左叶子之和

左叶子之和判断当前结点是不是左叶子是无法判断的,必须要通过结点的父节点来判断其左孩子是不是左叶子class Solution {public: int sum; int sumOfLeftLeaves(TreeNode* root) { if(root==NULL) return 0; return getleftsum(root); } int getleftsum(TreeNode* root) { if(ro

2021-01-22 08:46:02 49

原创 另一个树的子树

另一个树的子树可能是真的智商有问题hhh这个题与相同的树的区别就是要判断是否为子树(变了一点点就不太会了无语子)子树判断就是issubtree那边判断是否一样就是compareclass Solution {public: bool isSubtree(TreeNode* s, TreeNode* t) { if(s==NULL) return false; if(compare(s,t)) return true;//判断s和t是一样的树

2021-01-22 07:56:09 49

原创 相同的树

相同的树和对称的树一模一样class Solution {public: bool isSameTree(TreeNode* p, TreeNode* q) { return compare(p,q); } bool compare(TreeNode*p,TreeNode *q) { if(p==NULL&&q==NULL)return true; else if(p==NULL||q==NULL) return f

2021-01-22 07:30:39 69

原创 二叉树的所有路径

二叉树的所有路径class Solution {public: vector<string>ans; vector<string> binaryTreePaths(TreeNode* root) { string path; dfs(root,path); return ans; } void dfs(TreeNode*root,string path) { if(!root) retur

2021-01-20 19:35:31 37

原创 平衡二叉树

平衡二叉树class Solution {public: bool isBalanced(TreeNode* root) { if(root==NULL) return true; else return abs(getdepth(root->left) - getdepth(root->right)) <= 1 && isBalanced(root->left) && isBalanced(root->right);//

2021-01-18 15:17:18 45

原创 完全二叉树的节点个数

完全二叉树的节点个数class Solution {public: int countNodes(TreeNode* root) { return getsum(root); } int getsum(TreeNode*root) { if(root==NULL)return 0; int gl=getsum(root->left);//求左边的 int gr=getsum(

2021-01-18 14:11:09 75 1

原创 二叉树的最小深度

二叉树的最小深度这个题的意思是要求最小深度是从根节点到最近叶子节点的最短路径上的节点数量解释几个问题:深度从0开始不是从1开始所以为啥最后加1是因为以实际出发ans然后前面的两个if是以加1是加的是此时子结点class Solution {public: int getDepth(TreeNode*root)//确定函数参数以及类型 { if(root==NULL) return 0;//确定终止条件 int ld=getDepth(root-&g

2021-01-18 13:49:49 61

原创 N 叉树的最大深度

N 叉树的最大深度class Solution {public: int maxDepth(Node* root) { if(!root) return 0; return depth(root); } int depth(Node* root) { if(!root) return 0; int max1=0; for(int i=0;i<root->childre

2020-12-21 12:20:40 38

原创 对称二叉树

对称二叉树class Solution {public: bool isSymmetric(TreeNode* root) { if(root==NULL) return true; return compare(root->left,root->right); } bool compare(TreeNode *left,TreeNode *right)//确定递归参数和返回值 { if(left==NULL&a

2020-12-21 11:29:36 49

原创 N叉树的层序遍历

这个因为有很多孩子所以遍历到就行了N叉树的层序遍历class Solution {public: vector<vector<int>> levelOrder(Node* root) { queue<Node*>que; if(root!=NULL) que.push(root); vector<vector<int>>res; while(que.size()>0)

2020-12-20 14:55:06 39

原创 二叉树的层平均值

我怀疑我今天要把二叉树的题目全做完hhh还是之前那个层的基础上改动了一点二叉树层的平均值class Solution {public: vector<double> averageOfLevels(TreeNode* root) { queue<TreeNode*>que; if(root!=NULL) que.push(root); vector<double>res; while(que.size()&g

2020-12-20 14:43:41 58

原创 二叉树的右视图

都是二叉树层序遍历的基础上改一点点内容二叉树的右视图class Solution {public: vector<int> rightSideView(TreeNode* root) { queue<TreeNode*>que; if(root!=NULL) que.push(root); vector<int>res; while(que.size()>0) {

2020-12-20 14:35:03 44

原创 剑指 Offer 54. 二叉搜索树的第k大节点

剑指 Offer 54. 二叉搜索树的第k大节点这里说一下啥交二叉搜索树(有序若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树所以就是可以利用中序遍历class Solution {public: int kthLargest(TreeNode* root, int k) { vector<int>res; digui(root,res

2020-12-20 14:16:50 32

原创 二叉树的层次遍历 II

在上题的基础上做这个题就很轻松了传入门class Solution {public: vector<vector<int>> levelOrderBottom(TreeNode* root) { queue<TreeNode*>que; if(root!=NULL) que.push(root); vector<vector<int>>res; while(que.size

2020-12-20 13:37:16 42

原创 二叉树的层序遍历

二叉树的层序遍历怕自己下次来看不理解我还是模拟一下que: 3ans :刚开始que和ans是空的3->que;size=1;3然后出队列然后3->ans;3的左右儿子进入队列que:9 20; size=2;9出队列->ans size=1;20出队列 ->ans 把 15 7 捞金去size=2上代码class Solution {public: vector<vector<int>> levelOrder(Tree

2020-12-20 13:22:19 70

原创 二叉树的前中后序

二叉树的前序遍历class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int>res; Traversal(root,res); return res; } void Traversal(TreeNode*root,vector<int>&res) {

2020-12-20 12:42:04 88 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除