当前位置: 首页 > news >正文

二叉树oj题

目录

层序遍历(一)

题目

思路

代码

层序遍历(二)

题目

思路

代码

根据二叉树创建字符串

题目

思路

代码

二叉树的最近公共祖先

题目

思路

代码

暴力版

队列版

栈版

bs树和双向链表

题目

思路

代码

前序中序序列构建二叉树

题目

思路

代码 

中序后序序列构建二叉树

题目

思路

代码 

非递归前序遍历

题目

思路

代码

非递归中序遍历

题目

思路

代码

非递归后序遍历

题目

思路

代码


层序遍历(一)

题目

102. 二叉树的层序遍历 - 力扣(LeetCode)

思路

之前写过层序遍历,思路就是用队列存储结点,每次出一层,然后入出的结点的子结点

重点就是要记录一层的结点个数,然后出相应个数的结点

代码

    vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> arr;queue<TreeNode*> q;if(root!=nullptr){q.push(root);}while(!q.empty()){vector<int> tmp; //存储一层的结点int size=q.size(); //此时队列内的元素就是上一层的结点个数for(int i=0;i<size;++i){tmp.push_back(q.front()->val);if(q.front()->left){ //有子树就放进队列中q.push(q.front()->left);}if(q.front()->right){q.push(q.front()->right);}q.pop(); //出掉这个父结点}arr.push_back(tmp);}return arr;}

层序遍历(二)

题目

107. 二叉树的层序遍历 II - 力扣(LeetCode)

思路

看似好像很麻烦,其实只要把上一道题得到的答案逆置就行了

代码

    vector<vector<int>> levelOrderBottom(TreeNode* root) {vector<vector<int>> arr;queue<TreeNode*> q;if(root!=nullptr){q.push(root);}while(!q.empty()){vector<int> tmp;int size=q.size();for(int i=0;i<size;++i){tmp.push_back(q.front()->val);if(q.front()->left){q.push(q.front()->left);}if(q.front()->right){q.push(q.front()->right);}q.pop();}arr.push_back(tmp);}reverse(arr.begin(),arr.end());  //逆置return arr;}

根据二叉树创建字符串

题目

606. 根据二叉树创建字符串 - 力扣(LeetCode)

思路

基础代码还是一个前序遍历,只不过需要在打印时需要好好处理一下

  • 首先,不能有不必要的括号,比如有左树无右树 / 左右子树全无
  • 但是要注意,当无左树有右树时,需要将左树的空括号打印出来

代码

    void front_order(TreeNode* root,string& ans){if(root==nullptr){return ;}ans+=to_string(root->val);if(root->left||root->right){ //左需要特殊判断,左右均有/只有右/只有左,都需要打印左,即使是空括号ans+='(';front_order(root->left,ans);ans+=')';}if(root->right){ //右只需要在它存在时打印ans+="(";front_order(root->right,ans);ans+=')';}}string tree2str(TreeNode* root) {string ans;front_order(root,ans);return ans;}

二叉树的最近公共祖先

题目

236. 二叉树的最近公共祖先 - 力扣(LeetCode)

思路

  • 如果要找的两个结点分别在某一结点的左右,说明该结点就是公共结点
  • 如果两个结点都在某结点的左子树,那么该结点不会是公共结点,且确定公共结点需要在该结点的左子树中寻找 ; 右子树同理
  • 如果某结点就是要找的两个结点的其中一个结点

除了直接找结点位置,也可以将结点路径存储起来,然后按照找相交链表的交点那样(先从尾巴出[相差个数]个结点),找出公共结点

队列/栈储存都是一样的

代码

暴力版

    bool find(TreeNode* root, TreeNode* p){if(root==nullptr){return false;}if(root==p){return true;}return find(root->left,p)||find(root->right,p); //只要一边找到了就返回真}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root==nullptr){return nullptr;}if(root==p||root==q){return root;}//判断当前结点下,要找结点的相对位置bool pleft=find(root->left,p);bool pright=!pleft;bool qleft=find(root->left,q);bool qright=!qleft;//如果都在左,去左找if(pleft&&qleft){return lowestCommonAncestor(root->left,p,q);}//如果都在右,去右找else if(pright&&qright){return lowestCommonAncestor(root->right,p,q);}//走到这里,说明一左一右else{return root;}}

队列版

 bool find_q(TreeNode* root, TreeNode* p,queue<TreeNode*>& ans){if(root==nullptr){return false;}if(root==p){ ans.push(root); //队列:先入子结点,保证先出的是子结点return true;}if(find_q(root->left,p,ans)){ //为真就存储起来(说明当前结点是路径上的一点)ans.push(root);return true;}if(find_q(root->right,p,ans)){ //同理ans.push(root);return true;} return false; //走到这里,说明左右均没找到,就说明这条路没有要找的结点} 
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {queue<TreeNode*> sp,sq;find_q(root,p,sp);find_q(root,q,sq);//先将多的出掉while(sp.size()>sq.size()){sp.pop();}while(sp.size()<sq.size()){sq.pop();}//然后同时出,直到找到那个公共结点while(sp.front()!=sq.front()){sp.pop();sq.pop();}return sp.front();}

栈版

    bool find_s(TreeNode* root, TreeNode* p,stack<TreeNode*>& ans){if(root==nullptr){return false;}ans.push(root); //注意:栈必须得先入父结点,保证先出的是子结点if(root==p){return true;}if(find_s(root->left,p,ans)){return true;}if(find_s(root->right,p,ans)){return true;}ans.pop();return false;}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {stack<TreeNode*> sp,sq;find_s(root,p,sp);find_s(root,q,sq);while(sp.size()>sq.size()){sp.pop();}while(sp.size()<sq.size()){sq.pop();}while(sp.top()!=sq.top()){sp.pop();sq.pop();}}

bs树和双向链表

题目

二叉搜索树与双向链表_牛客题霸_牛客网 (nowcoder.com)

思路

仔细看转化后的双向链表,结点顺序其实就是中序遍历的结点顺序

所以这道题的代码就是在中序遍历的基础上进行处理

  • 因为需要指向前驱和后继,所以至少得搞一个变量,存上一个结点
  • (毕竟没法知道下一个结点是啥,但上一个还是可以的,就像之前拿到父结点那样)
  • 那么前驱搞定了,后继呢?
  • 其实知道后继也可以,只要穿越到未来,再回到过去就可以知道了
  • 所以,我们实际上知道的后继是上一个结点的,也就是当前结点 (当前结点就是上一个结点的后继)
  • 还要注意一点,我们找到的第一个结点是最左端的,所以它没有前驱
  • 所以首次传入的prev是空指针(prev赋值给结点的前驱)

代码

	void inorder(TreeNode* root,TreeNode*& prev){if(root==nullptr){return;}inorder(root->left,prev);root->left=prev;if(prev){ //prev会为空,所以需要判断,不然就越界了prev->right=root;}prev=root; //因为之后要进root的后继结点了,所以需要更新previnorder(root->right,prev);}TreeNode* Convert(TreeNode* pRootOfTree) {if(pRootOfTree==nullptr){return nullptr;}TreeNode *prev=nullptr,*tmp=pRootOfTree;while(tmp->left!=nullptr){ //拿到链表的第一个结点tmp=tmp->left;}inorder(pRootOfTree,prev);return tmp;}

前序中序序列构建二叉树

题目

105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode)

思路

和手动构建树的顺序一样,前序确定根,中序确定根的左右子树,只不过需要用代码写出来

  • 因为每次都需要将中序数组分成两个(是不是很像快排里面的操作),所以我们还是使用递归来写
  • 但要注意,我们还需要一个不断增加的下标来访问前序(中序需要使用两个下标作为范围,它直接传值就行)

代码 

class Solution {
public:TreeNode* _build(vector<int>& preorder, vector<int>& inorder, int& prei, int inbegin, int inend) {if (inbegin > inend) { //数组不合法,说明不存在这个结点,所以返回空return nullptr;}TreeNode* node = new TreeNode(preorder[prei]); //按照前序构建二叉树(因为先拿到的都是根结点)int begin = inbegin;// while(preorder[prei]!=inorder[begin]&&begin<=inend){//     begin++;// }for (; begin <= inend; ++begin) { //在中序中找到根结点if (preorder[prei] == inorder[begin]) {break;}}++prei; //拿到下一个结点node->left = _build(preorder, inorder, prei, inbegin, begin - 1);//在找到的根结点,左区间是左子树node->right = _build(preorder, inorder, prei, begin + 1, inend);//同理return node;//左右子树构建完毕后,返回该结点}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {int prei = 0, inbegin = 0, inend = inorder.size();TreeNode* root = _build(preorder, inorder, prei, 0, (int)inorder.size() - 1);//注意这里的prei是引用return root; //最后返回的就是根结点}
};

中序后序序列构建二叉树

题目

106. 从中序与后序遍历序列构造二叉树 - 力扣(LeetCode)

思路

大体思路和上一道题一样,只不过是用后序找根

  • 而且要注意后序是左右根的顺序
  • 后序序列往左走,先找的是右子树的根,所以要先去中序的右半范围寻找

代码 

TreeNode* _build(vector<int>& inorder, vector<int>& postorder,int& posti,int inbegin,int inend){if(inbegin>inend){return nullptr;}TreeNode* root=new TreeNode(postorder[posti]);int begin=inbegin;while(begin<=inend){if(postorder[posti]==inorder[begin]){break;}begin++;}--posti;  //注意是--嗷root->right=_build(inorder,postorder,posti,begin+1,inend);//先被构建的是右子树root->left=_build(inorder,postorder,posti,inbegin,begin-1);return root;
}TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {int posti=postorder.size()-1;TreeNode* root=_build(inorder,postorder,posti,0,inorder.size()-1);return  root;}

非递归前序遍历

题目

144. 二叉树的前序遍历 - 力扣(LeetCode)

思路

虽然是非递归,但思路和递归一样,只不过得用循环做

  • 前序是根左右
  • 也就是说,前序的前几个元素都是左方结点
  • 之后开始访问右子树(按照左方节点的倒序)
  • 所以,倒序 -- 不就是栈吗,先入后出!!
  • 所以要用一个栈来存放左结点,然后不断取栈顶+访问其右子树

代码

vector<int> preorderTraversal(TreeNode* root) {vector<int> ans;  //存放前序序列的结点值stack<TreeNode*> tmp; //存放左结点指针,用于访问其右子树TreeNode* cur=root;while(!tmp.empty()||cur){ //栈空+当前结点是空结点,出循环while(cur){ans.push_back(cur->val); //入左结点tmp.push(cur); //存左结点指针cur=cur->left;}TreeNode* top=tmp.top(); cur=top->right; //访问右子树tmp.pop();}return ans;}

非递归中序遍历

题目

94. 二叉树的中序遍历 - 力扣(LeetCode)

思路

和前序的思路差不多,但是要注意,中序是左根右

  • 所以需要将左结点先存入栈中(先不要访问!!!)
  • 然后按照栈中顺序,取出,访问
  • 然后,将拿出结点的右结点按照上述操作重复进行,直到遍历完整棵树

代码

    vector<int> inorderTraversal(TreeNode* root) {vector<int> ans;  //存放中序序列的结点值stack<TreeNode*> tmp; //存放左结点指针,用于访问其右子树TreeNode* cur=root;while(!tmp.empty()||cur){ //栈空+当前结点是空结点,出循环while(cur){ //把所有左结点入栈tmp.push(cur);cur=cur->left;}cur=tmp.top();  //拿取栈顶元素ans.push_back(cur->val); //入中序序列cur=cur->right; //访问其右子树tmp.pop(); //该结点没啥用了,直接出}return ans;}

非递归后序遍历

题目

145. 二叉树的后序遍历 - 力扣(LeetCode)

思路

  • 后序是左右根
  • 也就是说,要先遍历完左结点,以及右结点后,才能访问结点
  • 而且要注意,如果该结点有右子树,就需要先循环右子树
  • 但是当循环完成后需要返回来访问结点
  • 该如何判断此时到底该访问右子树还是访问自己呢?
  • 想一想,当上一个结点是其右结点时,不就是该访问自己的时候吗?
  • 而上一个结点是左结点时,是该访问右子树的时候了
  • 所以需要拿到父结点,然后进行判断

代码

    vector<int> postorderTraversal(TreeNode* root) {vector<int> ans;  //存放中序序列的结点值stack<TreeNode*> tmp; //存放左结点指针,用于访问其右子树TreeNode* cur=root,*prev=nullptr; while(!tmp.empty()||cur){ //栈空+当前结点是空结点,出循环while(cur){ //把所有左结点入栈(cur就用于把当前结点的左结点存入栈)tmp.push(cur);              cur=cur->left;}TreeNode* top=tmp.top(); //代表当前的根结点if(top->right==nullptr || top->right==prev){ans.push_back(top->val); //入后序序列prev=top; //用于下一次循环时,判断上一个结点的右子树是否被访问过tmp.pop(); //该结点没啥用了,直接出}else{cur=top->right; //没有被访问过,就去右子树进行循环}}return ans;}

相关文章:

二叉树oj题

目录 层序遍历(一) 题目 思路 代码 层序遍历(二) 题目 思路 代码 根据二叉树创建字符串 题目 思路 代码 二叉树的最近公共祖先 题目 思路 代码 暴力版 队列版 栈版 bs树和双向链表 题目 思路 代码 前序中序序列构建二叉树 题目 思路 代码 中序后序…...

华为数通方向HCIP-DataCom H12-831题库(单选题:1-20)

第1题 关于IPSG下列说法错误的是? A、IPSG可以防范IP地址欺骗攻击 B、IPSG是一种基于三层接口的源IP地址过滤技术 C、IPSG可以开启IP报文检查告警功能,联动网管进行告警 D、可以通过IPSG防止主机私自更改IP地址 答案: B 解析: IPSG(入侵防护系统)并不是基于三层接口的源I…...

TableConvert-免费在线表格转工具 让表格转换变得更容易

在线表格转工具TableConvert TableConvert 是一个基于web的免费且强大在线表格转换工具&#xff0c;它可以在 Excel、CSV、LaTeX 表格、HTML、JSON 数组、insert SQL、Markdown 表格 和 MediaWiki 表格等之间进行互相转换&#xff0c;也可以通过在线表格编辑器轻松的创建和生成…...

伦敦金实时行情中的震荡

不知道各位伦敦金投资者&#xff0c;曾经花过多长的时间来观察行情走势的表现&#xff0c;不知道大家是否有统计过&#xff0c;其实行情有60%-70%的时间&#xff0c;都会处于没有明显方向的震荡行情之中呢&#xff1f;面对长期的震荡行情&#xff0c;伦敦金投资者道理应该如何应…...

蓝桥杯打卡Day7

文章目录 阶乘的末尾0整除问题 一、阶乘的末尾0IO链接 本题思路&#xff1a;由于本题需要求阶乘的末尾0&#xff0c;由于我们知道2*510可以得到一个0&#xff0c;那么我们就可以找出2的数和5的数&#xff0c;但是由于是阶乘&#xff0c;所以5的数量肯定是小于2的数量&#xf…...

Mobile Vision Transformer-based Visual Object Tracking

论文作者&#xff1a;Goutam Yelluru Gopal,Maria A. Amer 作者单位&#xff1a;Concordia University 论文链接&#xff1a;https://arxiv.org/pdf/2309.05829v1.pdf 项目链接&#xff1a;https://github.com/goutamyg/MVT 内容简介&#xff1a; 1&#xff09;方向&#…...

HTTP反爬困境

尊敬的程序员朋友们&#xff0c;大家好&#xff01;今天我要和您分享一篇关于解决反爬困境的文章。在网络爬虫的时代&#xff0c;许多网站采取了反爬措施来保护自己的数据资源。然而&#xff0c;作为程序员&#xff0c;我们有着聪明才智和技术能力&#xff0c;可以应对这些困境…...

从零开始探索C语言(九)----函数指针与回调函数

函数指针 函数指针是指向函数的指针变量。 通常我们说的指针变量是指向一个整型、字符型或数组等变量&#xff0c;而函数指针是指向函数。 函数指针可以像一般函数一样&#xff0c;用于调用函数、传递参数。 函数指针变量的声明&#xff1a; typedef int (*fun_ptr)(int,i…...

智慧工厂的基础是什么?功能有哪些?

关键词&#xff1a;智慧工厂、智慧工厂数字化、设备设施数字化、智能运维、工业互联网 1.智慧工厂的定义 智慧工厂是以数字化信息形式的工厂模型为基础&#xff0c;以实现制造系统离线分析设计和实际生产系统运行状态在线监控的新型工厂。智慧工厂的建设在于以高度集成的信息化…...

LeetCode 238. 除自身以外数组的乘积

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 使用前缀和进行解决该题&#xff0c;只不过与之前前缀和不同的是这个题目计算前缀和的时候不需要计算当前元素&#xff0c;也就是当前位置前缀和的值其实是不包含当前元素的前缀和。…...

点击劫持概念及解决办法

1.点击劫持的概念 点击劫持 (Clickjacking) 技术又称为界面伪装攻击 (UI redress attack )&#xff0c;是一种视觉上的欺骗手段。攻击者使用一个或多个透明的 iframe 覆盖在一个正常的网页上&#xff0c;然后诱使用户在该网页上进行操作&#xff0c;当用户在不知情的情况下点击…...

【Spring】手动实现Spring底层机制-问题的引出

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理手动实现Spring底层机制-问题的引出 &#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一下&#x1…...

Java - List 去重,获取唯一值,分组列出所属对应集合

问题&#xff1a;List 去重&#xff0c;获取唯一值&#xff0c;分组列出所属对应集合 方案一&#xff1a;这个不需要额外的内存占用 //遍历后判断赋给另一个list集合public static void main(String[] args){List<String> list new ArrayList<String>(); lis…...

离散高斯抽样(Discrete Gaussian Sampling)

离散高斯抽样 离散高斯抽样&#xff08;Discrete Gaussian Sampling&#xff09;是一种常见于密码学和数学领域的随机采样方法。它通常用于构建基于格&#xff08;lattice&#xff09;的密码学方案&#xff0c;如基于格的加密和数字签名。Discrete Gaussian Sampling 的主要目…...

Elasticsearch:什么是生成式人工智能?

生成式人工智能定义 给学生的解释&#xff08;基本&#xff09;&#xff1a; 生成式人工智能是一种可以创造新的原创内容的技术&#xff0c;例如艺术、音乐、软件代码和写作。 当用户输入提示时&#xff0c;人工智能会根据从互联网上现有示例中学到的知识生成响应&#xff0c;…...

责任链模式让我的代码精简10倍?

目录 什么是责任链使用场景结语 前言最近&#xff0c;我让团队内一位成员写了一个导入功能。他使用了责任链模式&#xff0c;代码堆的非常多&#xff0c;bug 也多&#xff0c;没有达到我预期的效果。实际上&#xff0c;针对导入功能&#xff0c;我认为模版方法更合适&#xff…...

Draw软件安装下载

Draw软件安装下载 1.软件简介2.软件下载3.安装方法 1.软件简介 Draw软件&#xff0c;全名为LibreOffice Draw&#xff0c;是一款免费、开源的2D矢量绘图软件&#xff0c;属于LibreOffice办公套件的一部分。它可以用来创建各种类型的图形&#xff0c;包括流程图、组织结构图、平…...

uniapp代码混淆ios上架43问题

参考文章&#xff1a;uniapp打包ios apk&#xff0c;混淆代码_uniapp 混淆_酸奶自由竟然重名了的博客-CSDN博客 uniapp打包ios&#xff0c;上传到ios应用市场时&#xff0c;会因为 4.3(代码重复率过高) 无法通过审核&#xff0c;此时可通过混淆代码来通过审核 1. 项目终端 安…...

Linux目录遍历函数

1.打开一个目录 #include <sys/types.h> #include <dirent.h> DIR *opendir(const char *name); 参数&#xff1a; -name:需要打开的目录的名称 返回值&#xff1a; DIR * 类型&#xff0c;理解为目录流 错误返回NULL 2.读取目录中的数据 #include <dirent.h…...

数据库-理论基础

目录 1.什么是数据库&#xff1f; 2.数据库与文件系统的区别&#xff1f; 3.常见的数据库由那些&#xff1f; 4.关系型数据库(MySQL&#xff09;的特征及组成结构介绍 1.什么是数据库&#xff1f; 数据&#xff1a;描述事物的符号记录&#xff0c;可以是数字&#xff0c;文…...

【已解决】src/spt_python.h:14:20: 致命错误:Python.h:没有那个文件或目录

src/spt_python.h:14:20: 致命错误&#xff1a;Python.h&#xff1a;没有那个文件或目录 问题 其中重点的报错信息 src/spt_python.h:14:20: fatal error: Python.h: No such file or directory 思路 sudo yum install python-devel然后重新安装需要的依赖。 解决 成功。…...

基于Face++网络爬虫+人脸融合算法智能发型推荐程序——深度学习算法应用(含Python及打包exe工程源码)+爬虫数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境Pycharm 环境 模块实现1. Face.APl调用1&#xff09;Face.APl介绍2&#xff09;调用API 2. 数据爬取1&#xff09;网络数据爬取步骤2&#xff09;爬虫实现 3. 模型构建4. 用户界面设计1&#xff09;需要调用的库文…...

Jetson nano嵌入式平台配置ip记录

背景 Jetson nano平台使用千兆网和PC连接时没有ip地址&#xff0c;在ubuntu的终端输入ifconfig显示eh0未设置ip&#xff0c;需要先在nano平台上配置ip地址&#xff0c;然后PC通过千兆网远程控制该平台。 配置ip 使用终端进入到network文件夹中&#xff0c; cd /etc/network…...

前端中的跨域请求及其解决方案

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 跨域&#xff08;Cross-Origin&#xff09;⭐CORS&#xff08;跨域资源共享&#xff09;⭐JSONP&#xff08;JSON with Padding&#xff09;⭐代理服务器⭐ WebSocket⭐服务器设置响应头⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a…...

SpringBoot2.0(mybatis-plus初始使用)

目录 一&#xff0c;介绍二&#xff0c;SpringBoot2.x整合MybatisPlus Lombok2.1&#xff0c;添加依赖 pom2.2&#xff0c;配置数据库信息 application.properties2.3&#xff0c;工程结构初始化 三&#xff0c;创建接口返回统一对象四&#xff0c;创建bean五&#xff0c;创建…...

游戏视频录制软件对比,哪款最适合你的需求?

随着电子竞技和游戏直播行业的迅速崛起&#xff0c;越来越多的玩家渴望记录并分享自己在游戏中的精彩瞬间。游戏视频录制软件正是满足这一需求的关键工具。本文将针对三款优秀的游戏视频录制软件进行对比分析&#xff0c;以便为读者提供选购建议。 游戏视频录制软件1&#xff1…...

耐蚀合金连续油管最新版 学习记录

声明 本文是学习GB-T 42858-2023 耐蚀合金连续油管. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了耐蚀合金连续油管的订货、材料、制造、检验试验、标记等。 本文件适用于油气井用耐蚀合金连续油管(以下简称"油管")…...

LoGoNet:基于局部到全局跨模态融合的精确 3D 目标检测

论文地址&#xff1a;https://arxiv.org/abs/2303.03595 论文代码&#xff1a;https://github.com/sankin97/LoGoNet 论文背景 激光雷达传感器点云通常是稀疏的&#xff0c;无法提供足够的上下文来区分远处的区域&#xff0c;从而造成性能次优。 激光雷达-摄像机融合方法在三…...

Python 多线程、线程池、进程池

线程间的通讯机制 消息队列 event 事件对象 当线程创建完成之后&#xff0c;并不会马上执行线程&#xff0c;而是等待某一事件发生&#xff0c;线程才会启动 import threading# # 创建 event 对象 # event threading.Event() # # 重置代码中的 event 对象&#xff0c;使得所…...

深入浅出了解华为端到端交付流程的概念和5个关键点

如果您或您所在的组织在学习和研究华为&#xff0c;那么对“端到端”这个词语就一点都不陌生。 今天华研荟带着您了解华为端到端的交付流程的思想和一些做法&#xff0c;如果了解了这个&#xff0c;那么对于华为在其他领域提出的端到端要求或做法就一通百通了。 一、什么是端…...

手机网站建设维护协议/不用流量的地图导航软件

在线课堂&#xff1a;https://www.100ask.net/index&#xff08;课程观看&#xff09; 论  坛&#xff1a;http://bbs.100ask.net/&#xff08;学术答疑&#xff09; 开 发 板&#xff1a;https://100ask.taobao.com/ &#xff08;淘宝&#xff09;      https://weid…...

上饶市建设局培训网站/恶意点击软件哪个好

我是做前端的&#xff0c;接触html也就一年&#xff0c;一年的时间&#xff0c;其实也就是个小白&#xff0c;恰好巧了&#xff0c;我这个小白&#xff0c;一年的时间&#xff0c;半年时间用来接触html、css、html5、css3等&#xff0c;当然也包括js与jquery的学习&#xff0c;…...

汽配网站源码/网店如何引流与推广

git .git目录提交我正在撰写一篇文章&#xff0c;概述了如何编写良好的Git提交消息&#xff0c;以及开发人员应遵循的各种Git提交消息约定和规则。 但是&#xff0c;正如我写的开发人员应遵循的最佳做法&#xff0c;我不断地发现自己在哪些开发商不应该做一个内部讨论。 我希望…...

wordpress无法跳转正确的404/百度惠生活推广怎么收费

本专栏是笔者的网络安全学习笔记&#xff0c;一面分享&#xff0c;同时作为笔记 工欲善其事必先利其器,本篇讲解一些常用工具的使用 前文链接 WAMP/DVWA/sqli-labs 搭建burpsuite工具抓包及Intruder暴力破解的使用 用到的工具 burpsuiteDirBuster 工具下载 burpsuite:前文…...

1个空间做2个网站/网站设计费用明细

第四周实验主要内容类与对象实验1 机动车1 实验目的本实验的目的是让大家使用类来封装对象的属性和功能。2 实验要求编写一个Java应用程序&#xff0c;该程序中有两个类&#xff1a;Vehicle(用于刻画机动车)和User(主类)。具体要求如下&#xff1a;Vehicle类有一个double类型的…...

微信上wordpress/seo就业

SVG剪裁路径和遮罩jQuery幻灯片是一款基于SVG clipPath和mask遮罩元素实现的网站动画幻灯片代码特效。在线演示本地下载转载于:https://www.cnblogs.com/wwhhq/p/8283759.html...