【C++】二叉树相关算法题
一、根据二叉树创建字符串
题目描述:
给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。
空节点使用一对空括号对 “()” 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
题目示例:
分析: 根据题意,我们可以观察出一下规律:
- 根据题意,如果左子树为空,右子树不为空,就需要加空()
- 如果右子树为空,就不需要加空()
- 左右子树都为空,就不需要加空()
/*** 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:string str = "";string tree2str(TreeNode* root) {if (root == nullptr)return "";str += to_string(root->val);//根据题意,如果左子树为空,右子树不为空,就需要加空()//如果右子树为空,就不需要加空()//左右子树都为空,就不需要加空()if (root->left || root->right){str += '(';tree2str(root->left);str += ')';}if (root->right){str += '(';tree2str(root->right);str += ')';}return str;}
};
二、二叉树的层序遍历
题目描述:
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
题目示例:
分析:
通过层序遍历二叉树,我们可以通过队列来实现,利用队列先进先出的特点对二叉树进行层序遍历,控制每一层的节点的个数,来实现层序遍历。
/*** 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:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> vv;queue<TreeNode*> q;int levelsize = 0;if(root){levelsize = 1;q.push(root);}while(q.size()){vector<int> v;while(levelsize--){TreeNode* front = q.front();q.pop();v.push_back(front->val);if(front->left)q.push(front->left);if(front->right)q.push(front->right);}levelsize = q.size();vv.push_back(v);}return vv;}
};
三、二叉树的层序遍历 II
题目描述:
给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
题目示例:
分析:
思路和上面一样,只需要将上面返回的vector数组逆转就行
/*** 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:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> vv;queue<TreeNode*> q;int levelsize = 0;if(root){levelsize = 1;q.push(root);}while(q.size()){vector<int> v;while(levelsize--){TreeNode* front = q.front();q.pop();v.push_back(front->val);if(front->left)q.push(front->left);if(front->right)q.push(front->right);}levelsize = q.size();vv.push_back(v);}reverse(vv.begin(),vv.end());return vv;}
};
四、二叉树的最近公共祖先
题目描述:
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。
题目示例:
分析:
- 第一种思路(时间复杂度O(N^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:bool IsIntree(TreeNode* root,TreeNode* p,TreeNode* q){if(root == nullptr)return false;if(root->val == p->val || root->val == q->val)return true;bool left = IsIntree(root->left,p,q);bool right = IsIntree(root->right,p,q);return left || right;}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root == nullptr)return nullptr;//p是自己的祖然后在查找q是否在左子树或右子树if(root->val == p->val && (IsIntree(root->left,p,q) || IsIntree(root->right,p,q))){return root;}//q是自己的祖然后在查找p是否在左子树或右子树else if(root->val == q->val && (IsIntree(root->left,p,q) || IsIntree(root->right,p,q))){return root;}//p,q在不在左子树或右子树中的任意一棵树else if(IsIntree(root->left,p,q) && IsIntree(root->right,p,q)){return root;}//这个节点不是最近公共祖先else {TreeNode* Inright = lowestCommonAncestor(root->left,p,q);if(Inright)//不是nullptr就表示这个节点是最近公共祖先return Inright;TreeNode* Inleft = lowestCommonAncestor(root->right,p,q);if(Inleft)//不是nullptr就表示这个节点是最近公共祖先return Inleft;return nullptr;}}
};
- 第二种思路(时间复杂度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) {}* };*/
class Solution {
public:bool GetPath(TreeNode* root,TreeNode* node,stack<TreeNode*>& Path){if(root == nullptr)return false;Path.push(root);if(root == node)return true;bool left = GetPath(root->left,node,Path);bool right = GetPath(root->right,node,Path);if(!right && !left)Path.pop();return left || right;//左子树和右子树都没有找到}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {stack<TreeNode*> ppath,qpath;GetPath(root,p,ppath);GetPath(root,q,qpath);while(ppath.size() > qpath.size()){ppath.pop();}while(qpath.size() > ppath.size()){qpath.pop();}while(qpath.top() != ppath.top()){qpath.pop();ppath.pop();}return ppath.top();}
};
五、将二叉搜索树转化为排序的双向链表
题目描述:
将一个 二叉搜索树 就地转化为一个 已排序的双向循环链表 。
对于双向循环列表,你可以将左右孩子指针作为双向循环链表的前驱和后继指针,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。
特别地,我们希望可以 就地 完成转换操作。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。还需要返回链表中最小元素的指针。
题目示例:
分析:
由题目给出条件,可知该二叉树是二叉搜索树,这题需要我们把二叉搜索树转换为 升序排列 的链表,我们知道二叉搜索树的升序遍历是 中序遍历 ,于是我们就可以定义两个指针 cur 和 prev ,cur 指向当前节点, prev 指向当前节点的上一个节点,通过 中序遍历 树的每一个节点,当当前节点 cur 的左子树遍历完,cur->left = prev ,通过改变前驱和后继的指针的指向,来把其链接已排序的双向循环链表.
/*
// Definition for a Node.
class Node {
public:int val;Node* left;Node* right;Node() {}Node(int _val) {val = _val;left = NULL;right = NULL;}Node(int _val, Node* _left, Node* _right) {val = _val;left = _left;right = _right;}
};
*/
class Solution {
public:void Link(Node* cur,Node*& prev){if(cur == nullptr)return;Link(cur->left,prev);cur->left = prev;if(prev)prev->right = cur;prev = cur;Link(cur->right,prev);}Node* treeToDoublyList(Node* root) {if(root == nullptr)return nullptr;Node* cur = root;Node* prev = nullptr;Link(cur,prev);Node* tail = prev;while(root->left){root = root->left;}Node* head = root;head->left = tail;tail->right = head;return head;}
};
六、从前序与中序遍历序列构造二叉树
题目描述:
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历,inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点
题目示例:
分析: 根据前序就可以确定根节点,根据中序就可以确定根节点的左右子树,用区间来表示根节点的左右子树区间,最后就可以确定出整个二叉树。
class Solution {
public://pre_begin,pre_endTreeNode* buildTree_with_pre_in(vector<int>& preorder, vector<int>& inorder,int& pospre,int in_begin,int in_end){if(in_begin > in_end){return nullptr;}//if(pospre <= inorder.size() - 1)TreeNode* newnode = new TreeNode(preorder[pospre++]);int pos;for(int i = in_begin;i <= in_end;i++){if(inorder[i] == newnode->val){pos = i;break;}}if(pospre > inorder.size() - 1)pospre = inorder.size() - 1;TreeNode* left = buildTree_with_pre_in(preorder,inorder,pospre,in_begin,pos - 1);// 左子树if(pospre > inorder.size() - 1)pospre = inorder.size() - 1;TreeNode* right = buildTree_with_pre_in(preorder,inorder,pospre,pos + 1,in_end);// 右子树newnode->left = left;newnode->right = right;return newnode;}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {int i = 0;TreeNode* root = buildTree_with_pre_in(preorder,inorder,i,0,inorder.size() - 1);return root;}
};
七、从中序与后序遍历序列构造二叉树
题目描述:
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历,postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。
题目示例:
分析: 与上面的题目类似,只不过是后序遍历,根据后序遍历的特点:左子树-右子树-根节点的特点,我们可以发现把后序反过来,就可以确定根节点的位置,然后再根据中序判断右子树和左子树的位置,其实就是一个 根-右子树-左子树 的过程来创建树,而前序创建树的就是 根-左子树-右子树 ,和前序相比就是遍历子树的顺序变了而已。
/*** 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:TreeNode* buildTree_with_in_post(vector<int>& inorder,vector<int>& postorder,int& pospost,int in_begin,int in_end){if(in_begin > in_end)return nullptr;TreeNode* newnode = new TreeNode(postorder[pospost--]);int pos = -1;for(int i = in_begin;i <= in_end;i++){if(inorder[i] == newnode->val){pos = i;break;}}TreeNode* right = buildTree_with_in_post(inorder,postorder,pospost,pos + 1,in_end);TreeNode* left = buildTree_with_in_post(inorder,postorder,pospost,in_begin,pos - 1);newnode->left = left;newnode->right = right;return newnode;}TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {int i = postorder.size() - 1;//从后序的最后一个节点开始TreeNode* root = buildTree_with_in_post(inorder,postorder,i,0,postorder.size() - 1);return root;}
};
八、非递归实现二叉树的前序遍历
题目描述: 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
题目示例:
分析: 要迭代⾮递归实现⼆叉树前序遍历,⾸先还是要借助递归的类似的思想,只是需要把结点存在栈中,⽅便类似递归回退时取父路径结点。跟这⾥不同的是,这⾥把⼀棵⼆叉树分为两个部分:
- 先访问左路结点
- 再访问左路结点的右⼦树
这⾥访问右⼦树要以循环从栈依次取出这些结点,循环⼦问题的思想访问左路结点的右⼦树。前序遍历的顺序为 根-左子树-右子树 ,我们每次访问一个节点,后需要把它入栈,就可以实现前序遍历。
/*** 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:vector<int> preorderTraversal(TreeNode* root) {vector<int> v;if(root == nullptr)return v;stack<TreeNode*> st;st.push(root);v.emplace_back(root->val);while(root->left){root = root->left;v.emplace_back(root->val);st.push(root);}while(st.size()){TreeNode* cur = st.top();st.pop();cur = cur->right;if(cur){st.push(cur);v.emplace_back(cur->val);}while(cur && cur->left){cur = cur->left;v.emplace_back(cur->val);st.push(cur);}}return v;}
};
九、非递归实现二叉树的中序遍历
题目描述: 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
题目示例:
分析:
中序访问的顺序是 左子树-根-右子树 ,每当访问玩左子树的时候,就将栈顶数据入栈,即可实现中序遍历二叉树
/*** 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:vector<int> inorderTraversal(TreeNode* root) {vector<int> v;if(root == nullptr)return v;stack<TreeNode*> st;st.push(root);while(root->left){root = root->left;st.push(root);}while(st.size()){TreeNode* cur = st.top();v.emplace_back(cur->val); st.pop();cur = cur->right;if(cur){st.push(cur);}while(cur && cur->left){cur = cur->left;st.push(cur);}}return v;}
};
十、非递归实现二叉树的后序遍历
题目描述: 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。
题目示例:
分析::
后序遍历的需要先访问顺序为 左子树-右子树-根 , 首先我们先把根节点 root 左子树的节点全部加入栈,我们想要访问根,就必须先把根的左子树和右子树都访问完,于是我们就需要用 prev 来表示它当前节点的前一个节点,如果 cur->right == nullptr || cur->right == prev 就表示当前根节点的左子树和右子树都访问完了,然后再出栈,并且不需要向下访问了。
/*** 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:vector<int> postorderTraversal(TreeNode* root) {vector<int> v;if(root == nullptr)return v;stack<TreeNode*> st;st.push(root);TreeNode* prev = nullptr;while(root->left){root = root->left;st.push(root);}while(st.size()){TreeNode* cur = st.top();if(cur->right == nullptr || cur->right == prev){st.pop();v.emplace_back(cur->val);prev = cur;continue;}cur = cur->right;if(cur){st.push(cur);}while(cur && cur->left){cur = cur->left;st.push(cur);}}return v;}
};
相关文章:

【C++】二叉树相关算法题
一、根据二叉树创建字符串 题目描述: 给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。 空节点使用一对空括号对 “()” 表示,转化后需要省略所有…...

物联网IoT系列之MQTT协议基础知识
文章目录 物联网IoT系列之MQTT协议基础知识物联网IoT是什么?什么是MQTT?为什么说MQTT是适用于物联网的协议?MQTT工作原理核心组件核心机制 MQTT工作流程1. 建立连接2. 发布和订阅3. 消息确认4. 断开连接 MQTT工作流程图MQTT在物联网中的应用 …...

【大学生体质】智能 AI 旅游推荐平台(Vue+SpringBoot3)-完整部署教程
智能 AI 旅游推荐平台开源文档 项目前端地址 ☀️项目介绍 智能 AI 旅游推荐平台(Intelligent AI Travel Recommendation Platform)是一个利用 AI 模型和数据分析为用户提供个性化旅游路线推荐、景点评分、旅游攻略分享等功能的综合性系统。该系统融合…...

【Node.js入门笔记1---初始Node.js)】
Node.js入门笔记1 初始Node.js1.Node.js简介2.Node.js中js的运行环境3.Node.js 可以做什么4.Node.js 怎么学 初始Node.js 1.Node.js简介 Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境,用于在服务器端运行 JavaScript 代码。它让开发者可以用 Java…...

自学Java-JavaSE基础加强(多线程)
自学Java-JavaSE基础加强(多线程) 一、创建线程1、方式一:继承Thread类小结 2、方式二:实现Runnable接口小结 3、方式三:实现Callable接口4、小结 二、线程的常用方法三、线程安全1、认识线程安全2、模拟线程安全问题3…...

数字后端培训实战项目六大典型后端实现案例
Q1:请教一个问题,cts.sdc和func.sdc在innovus用如何切换?在flow哪一步切换输入cts.sdc?哪一步切换到func.sdc,具体如何操作? 这个学员其实就是在问使用分段长clock tree时具体的flow流程是怎么样的?针对时…...

安卓免费多功能工具:一站式解决 PDF 阅读、编辑、转换等需求
软件介绍 今天要给大家介绍一款功能强大的PDF处理软件——PDFgear Android版。它是专为安卓设备打造的,完全免费,无需破解和激活就能使用。 此前,我们分享过它的桌面端,收获了大家的一致好评。今天要着重介绍的手机APP版本&…...

diffuser库使用本地模型生成图像
实验目的 使用diffuser库生成图像的文章是很多的,使用方法也并不复杂,安装库后调用现成的模型和接口即可,但是因为网络原因,模型下载总会遇到问题,对于使用服务器的研究者来说,挂梯子并不可行,…...

递归—基础算法
#基线条件和递归条件 #每个递归函数都有两部分:基线条件和递归条件。递归条件指的是函数调用自己,而基线条件则指的是函数不再调用自己,从而避免形成无限循环。 #栈:栈是一种数据结构,它是一种线性数据结构,…...

全面复习回顾——C++语法篇2
23、字符串相加 string s3;s3s1s2;cout<<s3; 24、结构体基本操作 struct student {// write your code here......string name;int age;double height0.0; };int main() {// write your code here......student s;cin>>s.name;cin>>s.age;cin>>s.hei…...

探秘基带算法:从原理到5G时代的通信变革【十】基带算法应用与对比
文章目录 三、算法在现代通信系统中的应用3.1 5G 通信中的应用3.1.1 信道编码与调制解调3.1.2 大规模 MIMO 技术3.1.3 案例分析:5G 基站与终端实现 3.2 卫星通信中的应用3.2.1 抗干扰与纠错编码3.2.2 信号处理与调制解调3.2.3 案例分析:卫星通信系统实例…...

Linux | Vim 鼠标不能右键粘贴、跨系统复制粘贴
注:本文为 “ Vim 中鼠标右键粘贴、跨系统复制粘贴问题解决方案” 相关文章合辑。 未整理去重。 Linux 入门:vim 鼠标不能右键粘贴、跨系统复制粘贴 foryouslgme 发布时间 2016 - 09 - 28 10:24:16 Vim 基础 命令模式(command - mode&…...

无人机遥控器扩频技术解析!
一、扩频技术基本原理 扩频技术(Spread Spectrum, SS)通过将信号的频谱扩展至远大于原始带宽进行传输,提升抗干扰性、隐蔽性和多用户能力。其核心原理包括: 直接序列扩频(DSSS) 利用高速伪随机码&#x…...

Spring Boot API 项目中 HAProxy 与 Nginx 的选择与实践
在开发 Spring Boot 构建的 RESTful API 项目时,负载均衡和反向代理是提升性能与可用性的关键环节。HAProxy 和 Nginx 作为两种流行的工具,经常被用于流量分发,但它们各有侧重。究竟哪一个更适合你的 Spring Boot API 项目?本文将…...

OpenBMC:BmcWeb构造connect对象
OpenBMC:BmcWeb server.run-CSDN博客 server在接收了tcp连接请求后,会构造一个ConnectionType对象,然后通过post调度,运行该对象的start函数 1.ConnectionType类型 其实也就是using ConnectionType = Connection<Adaptor, Handler>;类型 由于ConnectionType实例化于…...

ORB-SLAM2源码学习(六):相机跟踪(局部地图跟踪和关键帧创建)
目录 1.局部地图跟踪 1.1 更新局部关键帧UpdateLocalKeyFrames 1.2 更新局部地图点(来自局部关键帧)UpdateLocalPoints() 1.3 投影匹配 2. 对比四种跟踪方式以及使用的投影匹配 3.关键帧创建 3.1 判断是否需要创建新关键帧: NeedNewKeyFrame() 3…...

WordPress使用(3)
前面文章讲述了如何利用docker进行wordpress系统的安装及相关设置,本文将介绍如何进行站点数据和数据库数据的备份。 1. 备份数据库 # 进入mysql容器内部 docker exec -it mysqlwp bash# 使用mysqldump 命令导出数据库 mysqldump -u root -p wordpress > wordp…...

Docker基础篇——什么是Docker与Docker的仓库、镜像、容器三大概念
大家好我是木木,在当今快速发展的云计算与云原生时代,容器化技术蓬勃兴起,Docker 作为实现容器化的主流工具之一,为开发者和运维人员带来了极大的便捷 。下面我们一起了解下什么是Docker与与Docker的仓库、镜像、容器三大概念。 …...

Gitlab配置personal access token
1.点击左上角个人账号 -> Preferences 2. 点击左边栏 Access Tokens 3. 点击Add new token ,输入token名称,勾选权限(注意截至日期 “Expiration date” 可不填) 4. 创建成功后,显示token信息,复制到本地…...

使用STM32CubeMX实现LED灯每秒闪烁一次(STM32G070CBT6单片机)
1.打开STM32CubeMX,点击File->New Project,新建一个新工程。 2.搜索芯片型号,选择正确的芯片封装规格,准备对芯片的引脚进行配置。 进行上面的操作后,跳转到如下的页面。 3.选择要配置的引脚进行配置。此处我的LED是…...

django中路由配置规则的详细说明
在 Django 中,路由配置是将 URL 映射到视图函数或类视图的关键步骤,它决定了用户请求的 URL 会触发哪个视图进行处理。以下将详细介绍 Django 中路由配置的规则、高级使用方法以及多个应用配置的规则。 基本路由配置规则 1. 项目级路由配置 在 Django 项目中,根路由配置文…...

游戏引擎学习第138天
仓库:https://gitee.com/mrxiao_com/2d_game_3 资产:game_hero_test_assets_003.zip 发布 我们的目标是展示游戏运行时的完整过程,从像素渲染到不使用GPU的方式,我们自己编写了渲染器并完成了所有的工作。今天我们开始了一些新的内容&#…...

测试理论快速入门
软件测试的目的是什么 查出缺陷 查找程序的错误:测试功能是否可用,添加的功能是否成功添加实现 发现性能问题:查看响应速度是否在可接受范围内 找出兼容性问题:这个功能是否在多端都能成功使用,例如pc端和mo端 确保交…...

【PostgreSQL】如何免密使用PostgreSQL数据库内置工具
如何免密使用PostgreSQL数据库内置工具 方法 1:使用 .pgpass 文件自动输入密码步骤: 方法 2:使用环境变量 PGPASSWORD步骤: 我们在PostgreSQL数据库自带的各种工具时,每次使用都要输入数据库密码。比如在使用pg_dump 备…...

模块15.常用API
文章目录 模块15.常用API第一章.Math类1.Math类介绍2.Math类方法 第二章.BigInteger1.BigInteger介绍2.BigInteger使用 第三章.BigDecimal类1.BigDecimal介绍2.BigDecimal使用3.BigDecimal除法过时方法解决 第四章.Date日期类1.Date类的介绍2.Date类的使用3.Date类的常用方法 第…...

5c/c++内存管理
1. C/C内存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(sizeof(int) * 4);i…...

python实现的可爱卸载动画
在逛掘金时,掘金用户在B站看到的灵感进行的一个卸载窗口的动画效果的实用案例。人类是一种不断在学习的动物,并且是一种模仿能力学习能里比较强的动物。我这里是第三波的学习实践者咯! 相对VUE构建动画效果窗口,我更加喜欢用pytho…...

微服务的春天:基于Spring Boot的架构设计与实践
微服务的春天:基于Spring Boot的架构设计与实践 在如今的技术领域,微服务架构俨然成为了解决复杂系统开发与运维挑战的关键利器。作为一名资深运维和自媒体创作者,笔名Echo_Wish,我将深入探讨基于Spring Boot的微服务架构设计,结合实例代码说明观点,希望能为大家带来启发…...

*VulnHub-FristiLeaks:1.3暴力解法、细节解法,主打软硬都吃,隧道搭建、寻找exp、提权、只要你想没有做不到的姿势
*VulnHub-FristiLeaks:1.3暴力解法、细节解法,主打软硬都吃,隧道搭建、寻找exp、提权、只要你想没有做不到的姿势 一、信息收集 1、扫靶机ip 经典第一步,扫一下靶机ip arp-scan -l 扫描同网段 nmap -sP 192.168.122.0/242、指纹扫描、端口…...

OpenCV 颜色空间:原理与操作指南
颜色空间原理 RGB 颜色空间 RGB(Red, Green, Blue)是最常见的颜色空间,它通过红、绿、蓝三种颜色通道的不同强度组合来表示颜色。在 OpenCV 中,RGB 图像的每个像素由三个 8 位无符号整数(0 - 255)分别表示…...