二叉树经典题题解(超全题目)(力扣)

  

 ✨欢迎来到脑子不好的小菜鸟的文章✨

      🎈创作不易,麻烦点点赞哦🎈

          所属专栏:刷题  

          我的主页:脑子不好的小菜鸟

          文章特点:关键点和步骤讲解放在

          代码相应位置

144. 二叉树的前序遍历

题目链接:https://leetcode.cn/problems/binary-tree-preorder-traversal/

/*** 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) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*///中左右/*法一:递归法*/class Solution {
public:void traversal(TreeNode* root,vector<int>& vec/*类似于数组*/){if(root==NULL)return;vec.push_back/**/(root->val);traversal(root->left,vec);traversal(root->right,vec);}vector<int> preorderTraversal(TreeNode* root) {vector<int>result;traversal(root,result);return result;}
};/*法二:迭代法
因为递归是用栈实现的,所以迭代法也用栈实现,
因为弹出的顺序是    中左右,所以栈的位置(左边封闭):右左中
先把根节点放进栈,再放入  右  节点,再放进左节点(因为栈是先进后出),再一一弹出*/class Solution {
public:vector<int> preorderTraversal(TreeNode* root) {vector<int>result;if(root==NULL)return result;stack<TreeNode*>st;st.push(root);while(!st.empty()){TreeNode* cur=st.top();st.pop();if(cur==NULL)continue;result.push_back(cur->val);st.push(cur->right);/******/st.push(cur->left);}return result;}
};
/*法三:统一迭代法(注释是中序遍历的)*/class Solution {
public:vector<int> preorderTraversal(TreeNode* root) {vector<int>result;if(root==NULL)return result;stack<TreeNode*>st;TreeNode* cur=root;st.push(cur);//中左右---->放的时候应该为右左中while(!st.empty()){cur=st.top();if(cur!=NULL)//加入节点入栈,记住中间节点是遍历节点,而不是操作节点,所以要标记(在后面加NULL){st.pop();//因为先放进去右节点if(cur->right!=NULL) st.push(cur->right);/*!!!!!!!!注意要不为空才可以放入,不然else部分会运行错误!!!!!!*/if(cur->left!=NULL) st.push(cur->left);st.push(cur);st.push(NULL);/**/}else{st.pop();//把NULL弹出cur=st.top();st.pop();result.push_back(cur->val);}}return result;}
};


145. 二叉树的后序遍历

题目链接:https://leetcode.cn/problems/binary-tree-postorder-traversal/

/*** 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) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*///左右中/*法一:迭代法*/// class Solution {
// public:
//     void traversal(TreeNode* root,vector<int>& vec/*类似于数组*/)
//     {
//         if(root==NULL)
//         return;//         traversal(root->left,vec);
//         traversal(root->right,vec);
//         vec.push_back/**/(root->val);
//     }//     vector<int> postorderTraversal(TreeNode* root) 
//     {
//         vector<int>result;
//         traversal(root,result);
//         return result;
//     }
// };/*法二:迭代法
因为递归是用栈实现的,所以迭代法也用栈实现,与前序遍历的迭代法类似
左右中,所以栈的样子(左边闭合):中右左---->把前序遍历的左右顺序换一下,再整个数组调转
*/class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {vector<int>result;if(root==NULL)return result;stack<TreeNode*>st;st.push(root);while(!st.empty()){TreeNode* cur=st.top();st.pop();if(cur==NULL)continue;result.push_back(cur->val);st.push(cur->left);st.push(cur->right);/******/}reverse(result.begin(),result.end());return result;}
};
class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {vector<int>result;if(root==NULL)return result;stack<TreeNode*>st;TreeNode* cur=root;st.push(cur);//左右中---->放的时候应该为中右左while(!st.empty()){cur=st.top();if(cur!=NULL)//加入节点入栈,记住中间节点是遍历节点,而不是操作节点,所以要标记(在后面加NULL){st.pop();//因为先放进去右节点st.push(cur);st.push(NULL);/**/if(cur->right!=NULL) st.push(cur->right);/*!!!!!!!!注意要不为空才可以放入,不然else部分会运行错误!!!!!!*/if(cur->left!=NULL) st.push(cur->left);}else{st.pop();//把NULL弹出cur=st.top();st.pop();result.push_back(cur->val);}}return result;}
};
/*法三:统一迭代法(注释是中序遍历的)*/class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {vector<int>result;if(root==NULL)return result;stack<TreeNode*>st;TreeNode* cur=root;st.push(cur);//左右中---->放的时候应该为中右左while(!st.empty()){cur=st.top();if(cur!=NULL)//加入节点入栈,记住中间节点是遍历节点,而不是操作节点,所以要标记(在后面加NULL){st.pop();//因为先放进去右节点st.push(cur);st.push(NULL);/**/if(cur->right!=NULL) st.push(cur->right);/*!!!!!!!!注意要不为空才可以放入,不然else部分会运行错误!!!!!!*/if(cur->left!=NULL) st.push(cur->left);}else{st.pop();//把NULL弹出cur=st.top();st.pop();result.push_back(cur->val);}}return result;}
};

 94. 二叉树的中序遍历

题目链接:https://leetcode.cn/problems/binary-tree-inorder-traversal/

//左中右/*法一:递归法*/
class Solution {
public:void Traversal(TreeNode* cur,vector<int>& result){if(cur==NULL)return;Traversal(cur->left,result);result.push_back(cur->val);Traversal(cur->right,result);}vector<int> inorderTraversal(TreeNode* root) {vector<int>result;Traversal(root,result);return result;}
};/*法二:迭代法
与前序遍历后序遍历不同,注意 遍历节点 和 处理节点 的区别
解题方法:需要一个指针去遍历二叉树,
若遍历的节点为空,则将栈顶元素加入答案,并弹出栈顶元素;
若不为空,则将该元素加入栈中,再将指针指向该元素的左节点
当栈和节点都为空,遍历结束
*/class Solution {
public:vector<int> inorderTraversal(TreeNode* root) {vector<int>result;if(root==NULL)return result;stack<TreeNode*>st;TreeNode* cur=root;while(!st.empty()||cur!=NULL)//注意是||{if(cur!=NULL){st.push(cur);cur=cur->left;}else{cur=st.top();/*注意是cur*/st.pop();result.push_back(cur->val);cur=cur->right;}}return result;}
};
但是发现三种迭代法不统一,不统一的原因是:前后序遍历是处理节点与遍历节点相同,但是中序不相同
/*法三:统一迭代法*/class Solution {
public:vector<int> inorderTraversal(TreeNode* root) {vector<int>result;if(root==NULL)return result;stack<TreeNode*>st;TreeNode* cur=root;st.push(cur);//左中右---->放的时候应该为右中左while(!st.empty()){cur=st.top();if(cur!=NULL)//加入节点入栈,记住中间节点是遍历节点,而不是操作节点,所以要标记(在后面加NULL){st.pop();//因为先放进去右节点if(cur->right!=NULL) st.push(cur->right);/*!!!!!!!!注意要不为空才可以放入,不然else部分会运行错误!!!!!!*/st.push(cur);st.push(NULL);/**/if(cur->left!=NULL) st.push(cur->left);}else{st.pop();//把NULL弹出cur=st.top();st.pop();result.push_back(cur->val);}}return result;}
};

 102. 二叉树的层序遍历

题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/

/*模板!!!!!!!!!!!!!!
层序遍历靠二叉树是不可以实现的,所以需要一个队列+size来存储
*//*
注意在C++中:
一维数组的定义:vector<数组 元素 的数据类型>
二维数组的定义:vector<一维数组>
vector是push_back
queue是push,front
*/class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>>result;int size;TreeNode* cur=root;queue<TreeNode*>que;if(cur!=NULL)que.push(cur);//注意是push,不是push_backwhile(!que.empty()){size=que.size();vector<int>vec;while(size--){TreeNode* p=que.front();//注意是front,不是topvec.push_back(p->val);//注意是push_backque.pop();if(p->left!=NULL) que.push(p->left);if(p->right!=NULL) que.push(p->right);}result.push_back(vec);}return result;}
};

 107. 二叉树的层序遍历 II

题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal-ii/

//二叉树的层序遍历的答案数组翻转就好class Solution {
public:vector<vector<int>> levelOrderBottom(TreeNode* root) {vector<vector<int>>result;int size;TreeNode* cur=root;queue<TreeNode*>que;if(cur!=NULL)que.push(cur);//注意是push,不是push_backwhile(!que.empty()){size=que.size();vector<int>vec;while(size--){TreeNode* p=que.front();//注意是front,不是topvec.push_back(p->val);//注意是push_backque.pop();if(p->left!=NULL) que.push(p->left);if(p->right!=NULL) que.push(p->right);}result.push_back(vec);}reverse(result.begin(),result.end());return result;}
};

 199. 二叉树的右视图


题目链接:https://leetcode.cn/problems/binary-tree-right-side-view/

//一直往右走(想得太简单了)----->正确思路:看是不是该层最右边的元素---->同样设置size,size=1的时候就是最右边的class Solution {
public:vector<int> rightSideView(TreeNode* root) {vector<int>result;int size;TreeNode* cur=root;queue<TreeNode*>que;if(cur!=NULL)que.push(cur);//注意是push,不是push_backwhile(!que.empty()){size=que.size();while(size){cur=que.front();/**/if(size==1)result.push_back(cur->val);que.pop();if(cur->left!=NULL) que.push(cur->left);if(cur->right!=NULL) que.push(cur->right);size--;}//cur=cur->right;(错误写法)}return result;}
};

 637. 二叉树的层平均值


题目链接:https://leetcode.cn/problems/average-of-levels-in-binary-tree/

//class Solution {
public:vector<double> averageOfLevels(TreeNode* root) {long long sum=0;double average=0.0;vector<double>result;int size,size1;queue<TreeNode*>que;//注意<>内的类型TreeNode*cur=root;if(cur!=NULL)que.push(cur);while(!que.empty()){sum=0;size=que.size();size1=size;while(size1--){cur=que.front();sum+=cur->val;que.pop();if(cur->left) que.push(cur->left);if(cur->right) que.push(cur->right);}average=sum*1.0/size;result.push_back(average);}return result;}
};

429. N 叉树的层序遍历


https://leetcode.cn/problems/n-ary-tree-level-order-traversal/
 


/*
// 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;children = _children;}
};
*/class Solution {
public:vector<vector<int>> levelOrder(Node* root) {vector<vector<int>>result;queue<Node*>que;Node* cur=root;int size;if(cur!=NULL)que.push(cur);while(!que.empty()){vector<int>vec;size=que.size();while(size--){cur=que.front();vec.push_back(cur->val);que.pop();for(int i=0;i<cur->children.size();i++){if(cur->children[i]) que.push(cur->children[i]);}}result.push_back(vec);}   return result;}
};

515. 在每个树行中找最大值

https://leetcode.cn/problems/find-largest-value-in-each-tree-row/

//class Solution {
public:vector<int> largestValues(TreeNode* root) {vector<int>result;int max=INT_MIN;int size;queue<TreeNode*>que;TreeNode* cur=root;if(cur==NULL)return result;que.push(cur);while(!que.empty()){size=que.size();max=INT_MIN;/*每次都要更新*/while(size--){cur=que.front();que.pop();if(cur!=NULL&&cur->val>max)max=cur->val;if(cur->left)   que.push(cur->left);if(cur->right)  que.push(cur->right);}result.push_back(max);}return result;}
};

116. 填充每个节点的下一个右侧节点指针


https://leetcode.cn/problems/populating-next-right-pointers-in-each-node/

/*
// Definition for a Node.
class Node {
public:int val;Node* left;Node* right;Node* next;Node() : val(0), left(NULL), right(NULL), next(NULL) {}Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}Node(int _val, Node* _left, Node* _right, Node* _next): val(_val), left(_left), right(_right), next(_next) {}
};
*/
class Solution {
public:Node* connect(Node* root) {Node* cur=root;queue<Node*>que;int size;if(cur==NULL)return root;que.push(cur);while(!que.empty()){size=que.size();Node* Precur;Node* cur;for(int i=0;i<size;i++){if(i==0){Precur=que.front();que.pop();cur=Precur;/*!!!!!!!!!!!!!111*/}else{cur=que.front();que.pop();Precur->next=cur;Precur=Precur->next;}if(cur->left)   que.push(cur->left);if(cur->right)  que.push(cur->right);}Precur->next=NULL;}return root;}
};

 117. 填充每个节点的下一个右侧节点指针 II

https://leetcode.cn/problems/populating-next-right-pointers-in-each-node-ii/


/*
// Definition for a Node.
class Node {
public:int val;Node* left;Node* right;Node* next;Node() : val(0), left(NULL), right(NULL), next(NULL) {}Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}Node(int _val, Node* _left, Node* _right, Node* _next): val(_val), left(_left), right(_right), next(_next) {}
};
*/class Solution {
public:Node* connect(Node* root) {queue<Node*>que;if(root==NULL)return root;que.push(root);int size;while(!que.empty()){size=que.size();Node* precur;Node* cur;for(int i=0;i<size;i++){if(i==0){precur=que.front();que.pop();cur=precur;}else{cur=que.front();que.pop();precur->next=cur;precur=precur->next;}if(cur->left)   que.push(cur->left);if(cur->right)  que.push(cur->right);}precur->next=NULL;}return root;}
};

104. 二叉树的最大深度

https://leetcode.cn/problems/maximum-depth-of-binary-tree/


/*使用迭代法的话,使用层序遍历是最为合适的,因为最大的深度就是二叉树的层数,和层序遍历的方式极其吻合。在二叉树中,一层一层的来遍历二叉树,记录一下遍历的层数就是二叉树的深度*/class Solution {
public:int maxDepth(TreeNode* root) {int deepth=0;queue<TreeNode*>que;int size;if(root==NULL)return 0;TreeNode* cur=root;que.push(cur);while(!que.empty()){size=que.size();deepth++;while (size--){cur = que.front();que.pop();if(cur->left)   que.push(cur->left);if(cur->right)  que.push(cur->right);}}return deepth;}
};

111. 二叉树的最小深度


https://leetcode.cn/problems/minimum-depth-of-binary-tree/

//最先左右孩子都为空的层数为最小深度class Solution {
public:int minDepth(TreeNode* root) {int deepth=0;queue<TreeNode*>que;TreeNode* cur=root;int size;if(root==NULL)return 0;que.push(cur);while(!que.empty()){size = que.size();deepth++;while(size--){cur=que.front();que.pop();if(cur->left)   que.push(cur->left);if(cur->right)  que.push(cur->right);/*注意是放在while(size--)里面*/if(cur->left==NULL&&cur->right==NULL)return deepth;}}return deepth;}
};

226. 翻转二叉树

https://leetcode.cn/problems/invert-binary-tree/
 


//每个节点的左右都翻转一下就好
//该题可用前中后序,前序和后序是最好的,而中序要绕弯子,在表面上看是操作了两次左子树
//也可用层序遍历/*法一:层序遍历*/
class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root==NULL)return root;queue<TreeNode*>que;TreeNode* cur=root;que.push(cur);int size;while(!que.empty()){size=que.size();while(size--){cur=que.front();que.pop();swap(cur->left,cur->right);if(cur->left)   que.push(cur->left);if(cur->right)  que.push(cur->right);}}return root;}
};// /*法二:前序遍历(后续遍历只是把swap的操作换一下位置)*/
class Solution {
public:TreeNode* Swap(TreeNode* cur){if(cur==NULL)return cur;swap(cur->left,cur->right);Swap(cur->left);Swap(cur->right);return cur;}TreeNode* invertTree(TreeNode* root) {if(root==NULL)return root;Swap(root);return root;}
};/*法三:中序遍历*/
class Solution {
public:TreeNode* Swap(TreeNode* cur){if(cur==NULL)return cur;Swap(cur->left);swap(cur->left,cur->right);Swap(cur->left);/*left!!!!!!!*/return cur;}TreeNode* invertTree(TreeNode* root) {if(root==NULL)return root;Swap(root);return root;}
};

589. N 叉树的前序遍历

https://leetcode.cn/problems/n-ary-tree-preorder-traversal/
 


/*
// 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;children = _children;}
};
*/class Solution {
public:Node* traversal(Node* cur,vector<int>& result){if(cur==NULL)return cur;result.push_back(cur->val);int size=cur->children.size();for(int i=0;i<size;i++)traversal(cur->children[i],result);return cur;}vector<int> preorder(Node* root) {int size;vector<int>result;traversal(root,result);return result;}
};

590. N 叉树的后序遍历


https://leetcode.cn/problems/n-ary-tree-postorder-traversal/
 


/*
// 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;children = _children;}
};
*/class Solution {
public:Node* traversal(Node* cur,vector<int>& result){if(cur==NULL)return cur;int size=cur->children.size();for(int i=0;i<size;i++)traversal(cur->children[i],result);result.push_back(cur->val);return cur;}vector<int> postorder(Node* root) {int size;vector<int>result;traversal(root,result);return result;}
};

101. 对称二叉树


https://leetcode.cn/problems/symmetric-tree/

/*法一:递归法*//*两个关键点:
1.遍历顺序:后序,因为要把两个孩子的信息传给父节点才知道左右父节点的孩子一不一样---->要把两个孩子的信息传给父节点的题目都是用后序遍历
2.解题关键:要知道看是否对称是看右子树是不是左子树翻转过来的,左子树里侧 = 右子树里侧    左子树外侧 = 右子树外侧*/class Solution {
public:bool compare(TreeNode* left,TreeNode* right){/*注意是else if*/if(left==NULL&&right!=NULL) return false;else if(left!=NULL&&right==NULL) return false;else if(left==NULL&&right==NULL) return true;else if(left->val!=right->val)  return false;else{bool inside = compare(left->right,right->left);//内侧bool outside = compare(left->left,right->right);//外侧bool result=inside&&outside;return result;}}bool isSymmetric(TreeNode* root) {if(root==NULL)  return true;return compare(root->left,root->right);}
};/*迭代法(注意不是层序遍历)---->用 栈和队列 都可以,类似*///队列class Solution {
public:bool isSymmetric(TreeNode* root) {if(root==NULL)  return true;queue<TreeNode*>que;TreeNode* cur = root;que.push(cur->left);que.push(cur->right);while(!que.empty()){TreeNode* leftNode = que.front();que.pop();TreeNode* rightNode = que.front();que.pop();if(leftNode==NULL&&rightNode==NULL) continue;//return true;else if(leftNode!=NULL&&rightNode==NULL)   return false;else if(leftNode==NULL&&rightNode!=NULL)    return false;else if(leftNode->val!=rightNode->val)  return false;else{que.push(leftNode->left);//左子树的左孩子que.push(rightNode->right);//右子树的右孩子que.push(leftNode->right);//左子树的右孩子que.push(rightNode->left);//右子树的左孩子}}return true;}
};//栈:与队列出容器的顺序不同而已class Solution {
public:bool isSymmetric(TreeNode* root) {if(root==NULL)  return true;stack<TreeNode*>st;TreeNode* cur = root;st.push(cur->left);st.push(cur->right);while(!st.empty()){TreeNode* rightNode = st.top();//注意顺序st.pop();TreeNode* leftNode = st.top();st.pop();if(leftNode==NULL&&rightNode==NULL) continue;//return true;else if(leftNode!=NULL&&rightNode==NULL)   return false;else if(leftNode==NULL&&rightNode!=NULL)    return false;else if(leftNode->val!=rightNode->val)  return false;else{st.push(leftNode->left);//左子树的左孩子st.push(rightNode->right);//右子树的右孩子st.push(leftNode->right);//左子树的右孩子st.push(rightNode->left);//右子树的左孩子}}return true;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/670085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL组复制的介绍

前言 本文介绍关于MySQL组复制的背景信息和基本原理。包括&#xff0c;介绍MySQL传统复制方法的原理和隐患、介绍组复制的原理&#xff0c;单主模式和多主模式等等。通过结合原理图学习这些概念&#xff0c;可以很好的帮助我们理解组复制技术这一MySQL高可用方案&#xff0c;有…

7.0 Zookeeper 客户端基础命令使用

zookeeper 命令用于在 zookeeper 服务上执行操作。 首先执行命令&#xff0c;打开新的 session 会话&#xff0c;进入终端。 $ sh zkCli.sh 下面开始讲解基本常用命令使用&#xff0c;其中 acl 权限内容在后面章节详细阐述。 ls 命令 ls 命令用于查看某个路径下目录列表。…

LRU缓存

有人从网络读数据&#xff0c;有人从磁盘读数据&#xff0c;机智的人懂得合理利用缓存加速数据的读取效率&#xff0c;提升程序的性能&#xff0c;搏得上司的赏识&#xff0c;赢得白富美的青睐&#xff0c;进一步走向人生巅峰~ LRU假说 LRU缓存&#xff08;Least Recently Used…

Webshell一句话木马

一、webshell介绍&#xff08;网页木马&#xff09; 分类&#xff1a; 大马&#xff1a;体积大、隐蔽性差、功能多 小马&#xff1a;体积小&#xff0c;隐蔽强&#xff0c;功能少 一句话木马&#xff1a;代码简短&#xff0c;灵活多样 二、一句话木马&#xff1a; &#xff1a;…

架构整洁之道-软件架构-展示器和谦卑对象、不完全边界、层次与边界、Main组件、服务

6 软件架构 6.9 展示器和谦卑对象 在《架构整洁之道-软件架构-策略与层次、业务逻辑、尖叫的软件架构、整洁架构》有我们提到了展示器&#xff08;presenter&#xff09;&#xff0c;展示器实际上是采用谦卑对象&#xff08;humble object&#xff09;模式的一种形式&#xff…

Linux第42步_移植ST公司uboot的第3步_uboot命令测试,搭建nfs服务器和tftp服务器

测试uboot命令&#xff0c;搭建nfs服务器和tftp服务器&#xff0c;是测试uboot非常关键的一步。跳过这一节&#xff0c;后面可能要踩坑。 一、输入“help回车”&#xff0c;查询uboot所支持的命令 二、输入“? bootz回车”&#xff0c;查询“bootz”怎么用 注意&#xff1a;和…

如何正确理解和获取S参数

S参数是网络参数&#xff0c;定义了反射波和入射波之间的关系&#xff0c;给定频率的S参数矩阵指定端口反射波b的矢量相对于端口入射波a的矢量&#xff0c;如下所示&#xff1a; bS∙a 在此基础上&#xff0c;如下图所示&#xff0c;为一个常见的双端口网络拓扑图&#xff1a;…

红队打靶练习:HEALTHCARE: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录探测 1、gobuster 2、dirsearch WEB web信息收集 gobuster cms sqlmap 爆库 爆表 爆列 爆字段 FTP 提权 信息收集 本地提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Inte…

LoRA:语言模型微调的计算资源优化策略

编者按&#xff1a;随着数据量和计算能力的增加&#xff0c;大模型的参数量也在不断增加&#xff0c;同时进行大模型微调的成本也变得越来越高。全参数微调需要大量的计算资源和时间&#xff0c;且在进行切换下游任务时代价高昂。 本文作者介绍了一种新方法 LoRA&#xff0c;可…

Java LinkedList 实现栈和队列

Java LinkedList 实现栈和队列 package com.zhong.collection;import java.util.LinkedList;public class LinkedListDemo {public static void main(String[] args) {// LinkedList 创建一个队列LinkedList<String> queue new LinkedList<>();// 进队System.out…

2024年【A特种设备相关管理(电梯)】考试题及A特种设备相关管理(电梯)模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 A特种设备相关管理&#xff08;电梯&#xff09;考试题是安全生产模拟考试一点通生成的&#xff0c;A特种设备相关管理&#xff08;电梯&#xff09;证模拟考试题库是根据A特种设备相关管理&#xff08;电梯&#xff…

UML之在Markdown中使用Mermaid绘制类图

1.UML概述 UML&#xff08;Unified modeling language UML&#xff09;统一建模语言&#xff0c;是一种用于软件系统分析和设计的语言工具&#xff0c;它用于帮助软件开发人员进行思考和记录思路。 类图是描述类与类之间的关系的&#xff0c;是UML图中最核心的。类图的是用于…

【Java数据结构】单向 不带头 非循环 链表实现

模拟实现LinkedList&#xff1a;下一篇文章 LinkedList底层是双向、不带头结点、非循环的链表 /*** LinkedList的模拟实现*单向 不带头 非循环链表实现*/ class SingleLinkedList {class ListNode {public int val;public ListNode next;public ListNode(int val) {this.val …

安全通信设置:使用 OpenSSL 为 Logstash 和 Filebeat 提供 SSL 证书

在为 Elasticsearch 采集数据时&#xff0c;我们经常使用到 Filebeat 及 Logstash。在我们之前的很多教程中&#xff0c;我们通常不为 Filebeat 和 Logstash 之前的通信做安全配置。 如何为 Filebeat 及 Logstash 直接建立安全的链接&#xff1f;这个在很多的情况下是非常有用的…

Python算法题集_环形链表

Python算法题集_环形链表 题234&#xff1a;环形链表1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【集合检索】2) 改进版一【字典检测】3) 改进版二【双指针】 4. 最优算法 本文为Python算法题集之一的代码示例 题234&#xff1a;环形链表 …

分享64个节日PPT,总有一款适合您

分享64个节日PPT&#xff0c;总有一款适合您 64个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/190YgEPzmbvopsht-n7YhpQ?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

Django模板(一)

一、基本规则 作为一个Web框架,Django需要一种方便的方式来动态生成HTML。最常用的方法依赖于模板。模板包含所需HTML输出的静态部分以及描述如何插入动态内容的特殊语法 1.1、django默认模板 在settings中配置: TEMPLATES = [{BACKEND: django.template.backends.django.…

Axios设置token到请求头的三种方式

1、为什么要携带token? 用户登录时&#xff0c;后端会返回一个token&#xff0c;并且保存到浏览器的localstorage中&#xff0c;可以根据localstorage中的token判断用户是否登录&#xff0c;登录后才有权限访问相关的页面&#xff0c;所以当发送请求时&#xff0c;都要携带to…

时序预测 | MATLAB实现基于CNN-GRU-AdaBoost卷积门控循环单元结合AdaBoost时间序列预测

时序预测 | MATLAB实现基于CNN-GRU-AdaBoost卷积门控循环单元结合AdaBoost时间序列预测 目录 时序预测 | MATLAB实现基于CNN-GRU-AdaBoost卷积门控循环单元结合AdaBoost时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于CNN-GRU-AdaBo…

[Linux] 网络编程套接字

目录 预备知识 网络字节序 网络字节序和主机字节序转换的库函数 socket编程接口 socket常见API sockaddr结构 套接字的种类 预备知识 1.在IP数据包头部中&#xff0c;有两个IP地址&#xff0c;分别叫做源IP地址和目的IP地址。 2.端口号&#xff1a;是传输层协议的内容…