初级算法-树
文章目录
- 二叉树的最大深度
- 题意:
- 解:
- 代码:
- 验证二叉搜索树
- 题意:
- 解:
- 代码:
- 对称二叉树
- 题意:
- 解:
- 代码:
- 二叉树的层序遍历
- 题意:
- 解:
- 代码:
- 将有序数组转换为二叉搜索树
- 题意:
- 解:
- 代码:
二叉树的最大深度
题意:
如题
解:
简单的树搜索操作,DFS和BFS
代码:
#include<bits/stdc++.h>
using namespace std;
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) {}
};
int dfs(TreeNode* root)
{int ans=1;if(root->left!=nullptr) ans=max(ans,1+dfs(root->left));if(root->right!=nullptr) ans=max(ans,1+dfs(root->right));return ans;
}
int bfs(TreeNode* root)
{int n=0;queue<TreeNode*>q;q.push(root);while(true){queue<TreeNode*>temp;while(!q.empty()){TreeNode* nn=q.front();q.pop();if(nn->left!=nullptr) temp.push(nn->left);if(nn->right!=nullptr) temp.push(nn->right);}q=temp;n++;if(q.empty()) break;}return n;
}
int maxDepth(TreeNode* root)
{if(root==nullptr) return 0;int ans1=dfs(root);cout<<"ans1:"<<ans1<<endl;int ans2=bfs(root);cout<<"ans2:"<<ans2<<endl;return ans1;
}
int main()
{}
验证二叉搜索树
题意:
一个二叉搜索树,要求有效条件:左子树严格小于父节点,右子树严格大于父节点且,且子节点的子树也要尊称这个条件
解:
dfs标记区间,蛮好写的
中序遍历,二叉搜索树的中序遍历是递增的,,很有趣
代码:
#include<iostream>
#include<climits>
using namespace std;
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) {}
};
bool zxbl(TreeNode* root,long long &val)//longlong 中序遍历
{bool ans=true;if(root->left!=nullptr) ans&=zxbl(root->left,val);if(root->val>val) val=root->val;else ans=false;if(root->right!=nullptr) ans&=zxbl(root->right,val);return ans;
}
bool dfs(TreeNode* root,long long l,long long r)//longlong dfs
{bool ans=true;if(root->val<=l || root->val>=r) return false;if(root->left!=nullptr){ans=dfs(root->left,l,root->val);if(!ans) return ans;}if(root->right!=nullptr){ans=dfs(root->right,root->val,r);if(!ans) return ans;}return ans;
}
bool isValidBST(TreeNode* root)
{//long long l=(long long)INT_MIN-1,r=(long long)INT_MAX+1;long long temp=(long long)INT_MIN-1;//bool ans=dfs(root,l,r);bool ans=zxbl(root,temp);cout<<ans<<endl;return ans;
}
int main()
{}
对称二叉树
题意:
一个二叉树判断是否对称
解:
成对访问就行
代码:
#include<bits/stdc++.h>
#include<climits>
using namespace std;
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) {}
};
bool dfs(TreeNode* root1,TreeNode* root2)//dfs 递归
{bool ans=true;if(root1==nullptr||root2==nullptr) return false;if(root1->val!=root2->val) return false;if(root1->left!=nullptr||root2->right!=nullptr) ans&=dfs(root1->left,root2->right);if(root1->right!=nullptr||root2->left!=nullptr) ans&=dfs(root1->right,root2->left);return ans;
}
typedef pair<TreeNode*,TreeNode*>PTT;
bool isSymmetric(TreeNode* root)//迭代
{bool ans=true;PTT ptt;queue<PTT>PTT_q;PTT_q.push({root,root});while(true){queue<PTT>PTT_temp;while(!PTT_q.empty()){ptt=PTT_q.front();PTT_q.pop();if(ptt.first==nullptr||ptt.second==nullptr){ans=false;break;}if(ptt.first->val!=ptt.second->val){ans=false;break;}if(ptt.first->left!=nullptr||ptt.second->right!=nullptr) PTT_temp.push({ptt.first->left,ptt.second->right});if(ptt.first->right!=nullptr||ptt.second->left!=nullptr) PTT_temp.push({ptt.first->right,ptt.second->left});}PTT_q=PTT_temp;if(!ans||PTT_q.empty()) break;}return ans;
}
/*
bool isSymmetric(TreeNode* root)
{bool ans=dfs(root,root);cout<<ans<<endl;return ans;
}*/
int main()
{}
二叉树的层序遍历
题意:
如题
解:
BFS板子
代码:
#include<bits/stdc++.h>
#include<climits>
using namespace std;
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) {}
};
vector<vector<int>> levelOrder(TreeNode* root)
{vector<vector<int>>ans;if(root==nullptr) return ans;queue<TreeNode*>q;q.push(root);while(true){vector<int>an;queue<TreeNode*>next;while(!q.empty()){TreeNode* temp=q.front();q.pop();an.push_back(temp->val);if(temp->left!=nullptr) next.push(temp->left);if(temp->right!=nullptr) next.push(temp->right);}ans.push_back(an);q=next;if(q.empty())break;}return ans;
}
int main()
{}
将有序数组转换为二叉搜索树
题意:
如题,需要转换成高度平衡二叉树
解:
建搜索二叉树板子add+高度平衡思维ph
为了让高度平衡,左右两边子节点数量差要小于等于1,所以每次从有序数组中取中间,然后对左右区间再建树
代码:
#include<bits/stdc++.h>
#include<climits>
using namespace std;
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) {}
};
void add(TreeNode* node,int &nums)
{if(node->val==nums) return;if(node->val>nums){if(node->left!=nullptr) add(node->left,nums);else node->left=new TreeNode(nums);}if(node->val<nums){if(node->right!=nullptr) add(node->right,nums);else node->right=new TreeNode(nums);}
}
void ph(TreeNode* &node,int l,int r,vector<int>& nums)
{if(l>r) return;int mid=(l+r)>>1;if(node==nullptr) node=new TreeNode(nums[mid]);else{cout<<"add:"<<nums[mid]<<endl;add(node,nums[mid]);}ph(node,l,mid-1,nums);ph(node,mid+1,r,nums);
}
TreeNode* sortedArrayToBST(vector<int>& nums)
{int lg=nums.size();TreeNode* root=nullptr;ph(root,0,lg-1,nums);return root;
}
int main()
{}
相关文章:
初级算法-树
文章目录 二叉树的最大深度题意:解:代码: 验证二叉搜索树题意:解:代码: 对称二叉树题意:解:代码: 二叉树的层序遍历题意:解:代码: 将有…...
Harbor Failed to start docker.service: Unit docker.service not found.
有可能是修改配置文件导致了问题,最近肯定修改过某个配置文件 本文只针对配置Harbor过程中遇到该问题,很有是deamon.json的 insecure-registries和docker.service的 ExecStart/usr/bin/dockerd --insecure-registry冲突了,删掉一个就好 我使…...
网络安全/信息安全(黑客技术)自学笔记
一、网络安全基础知识 1.计算机基础知识 了解了计算机的硬件、软件、操作系统和网络结构等基础知识,可以帮助您更好地理解网络安全的概念和技术。 2.网络基础知识 了解了网络的结构、协议、服务和安全问题,可以帮助您更好地解决网络安全的原理和技术…...
ADB 命令结合 monkey 的简单使用,超详细
一:ADB简介 1,什么是adb: ADB 全称为 Android Debug Bridge,起到调试桥的作用,是一个客户端-服务器端程序。其中客户端是用来操作的电脑,服务端是 Android 设备。ADB 也是 Android SDK 中的一个工具&…...
级联选择框
文章目录 实现级联选择框效果图实现前端工具版本添加依赖main.js导入依赖级联选择框样式 后端数据库设计 实现级联选择框 效果图 实现 前端 工具版本 node.js v16.6.0vue3 级联选择框使用 Element-Plus 实现 添加依赖 在 package.json 添加依赖,并 npm i 导入…...
如何在3ds max中创建可用于真人场景的巨型机器人:第 5 部分
推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. After Effects 中的项目设置 步骤 1 打开“后效”。 打开后效果 步骤 2 我有真人版 我在After Effects中导入的素材。这是将 用作与机器人动画合成的背景素材。 实景镜头 步骤 3 有背景 选定的素材…...
【MATLAB第61期】基于MATLAB的GMM高斯混合模型回归数据预测
【MATLAB第61期】基于MATLAB的GMM高斯混合模型回归数据预测 高斯混合模型GMM广泛应用于数据挖掘、模式识别、机器学习和统计分析。其中,它们的参数通常由最大似然和EM算法确定。关键思想是使用高斯混合模型对数据(包括输入和输出)的联合概率…...
Mnist分类与气温预测任务
目录 传统机器学习与深度学习的特征工程特征向量pytorch实现minist代码解析归一化损失函数计算图Mnist分类获取Mnist数据集,预处理,输出一张图像面向工具包编程使用TensorDataset和DataLoader来简化数据预处理计算验证集准确率 气温预测回归构建神经网络…...
Pytorch深度学习-----神经网络的卷积操作
系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用(ToTensor,Normalize,Resize ,Co…...
微信小程序转抖音小程序的坑:The component <xxx> used in pages/xxx/xxx is undefined
微信小程序组件定义在根目录的 app.json 中了,在抖音小程序中出现找不到的情况。 在需要用到组件的 pages 目录中页面文件夹的 json "usingComponents": {} 大括号中添加页面使用的组件,即可使用......
Vue+element Ui的el-select同时获取value和label的方法总结
1.通过ref的形式(推荐) <template><div class"root"><el-selectref"optionRef"change"handleChange"v-model"value"placeholder"请选择"style"width: 250px"><el-optionv-for&q…...
乐划锁屏充分发挥强创新能力,打造内容业新生态
乐划锁屏作为新型内容媒体,在这一市场有着众多独特的优势,不仅能够通过多场景的联动给内容创作者带来了更多可能性,还促进了更多优质作品的诞生,为用户带来更加丰富多彩的锁屏使用体验。 作为OPPO系统原生的OS应用,乐划锁屏一直致力于打造为用户提供至美内容的内容平台,吸引了全…...
防御第三天
1.总结当堂NAT与双机热备原理,形成思维导图 2.完成课堂NAT与双机热备实验 fw1: <USG6000V1>sy [USG6000V1]int g0/0/0 [USG6000V1-GigabitEthernet0/0/0]ip add 192.168.18.2 24 [USG6000V1-GigabitEthernet0/0/0]service-manage all permit (地址无所谓&…...
用JavaScript和HTML实现一个精美的计算器
文章目录 一、前言二、技术栈三、功能实现3.1 引入样式3.2 编写显示页面3.2 美化计算器页面3.3 实现计算器逻辑 四、总结 一、前言 计算器是我们日常生活中经常使用的工具之一,可以帮助我们进行简单的数学运算。在本博文中,我将使用JavaScript编写一个漂…...
基于postgresl的gaussDB(DWS)地址省市区解析函数
地址格式为: 省(自治区,直辖市)、市、区。 直辖市的地址格式为, 北京市北京市海淀区xxxxx。 若是北京市海淀区xxx,自己改改就可以了 采用的是笨办法,穷举。 涉及的两个主要内置函数。 1. instr( <start_positio…...
【Golang】Golang进阶系列教程--Go 语言 new 和 make 关键字的区别
文章目录 前言new源码使用 make源码使用 总结 前言 本篇文章来介绍一道非常常见的面试题,到底有多常见呢?可能很多面试的开场白就是由此开始的。那就是 new 和 make 这两个内置函数的区别。 在 Go 语言中,有两个比较雷同的内置函数…...
Day 9 C++ 内存分区模型
目录 内存四区 代码区 全局区 栈区 堆区 内存四区意义: 程序运行前后内存变化 程序运行前 代码区 全局区 程序运行后 栈区 堆区 new操作符 基本语法 创建 释放(delete) 内存四区 代码区 代码区(Code Segment&…...
STM32 CubeMX 定时器(普通模式和PWM模式)
STM32 CubeMX STM32 CubeMX 定时器(普通模式和PWM模式) STM32 CubeMXSTM32 CubeMX 普通模式一、STM32 CubeMX 设置二、代码部分STM32 CubeMX PWM模式一、STM32 CubeMX 设置二、代码部分总结 STM32 CubeMX 普通模式 一、STM32 CubeMX 设置 二、代码部分 …...
mysql清除主从复制关系
mysql清除主从复制关系 mysql主从复制中,需要将主从复制关系清除,需要取消其从库角色。这可通过执行RESET SLAVE ALL清除从库的同步复制信息、包括连接信息和二进制文件名、位置。从库上执行这个命令后,使用show slave status将不会有输出。reset slave是各版本Mysql都有的功…...
Spring Cloud Eureka 服务注册和服务发现超详细(附加--源码实现案例--及实现逻辑图)
文章目录 EurekaEureka组件可以实现哪些功能什么是CAP原则?服务注册代码实战搭建注册中心服务A搭建服务B搭建启动服务启动注册中心启动服务A启动服务B 结束语 Eureka 这篇文章先讲述一下Eureka的应用场景、代码实现案例,多个服务模块注册到Euraka中&…...
别只盯着错误页!从一次线上事故复盘:优化微信小程序web-view体验的5个隐藏细节
从线上事故到极致体验:微信小程序web-view优化的5个实战细节 那天凌晨3点,我被一阵急促的告警声惊醒。监控系统显示,公司核心小程序的H5活动页加载成功率从99.8%暴跌至62%。这个承载着双十一预售活动的页面,每小时流失着数百万潜在…...
ofa_image-caption_coco_distilled_en快速部署教程:7860端口WebUI调用全流程详解
ofa_image-caption_coco_distilled_en快速部署教程:7860端口WebUI调用全流程详解 本文介绍如何快速部署和使用ofa_image-caption_coco_distilled_en模型,这是一个专门用于为图片生成英文描述的AI系统。通过简单的Web界面,任何人都能轻松上传图…...
openEuler系统下NFS服务器配置实战:多场景权限管理与安全优化
1. NFS服务基础与openEuler环境准备 NFS(Network File System)是Linux系统中实现文件共享的经典方案,它允许不同主机通过网络访问远程文件系统,就像操作本地文件一样方便。在openEuler这个企业级Linux发行版上配置NFS服务…...
LAVIS深度解析:语言视觉智能库的架构设计与视觉问答实现原理
LAVIS深度解析:语言视觉智能库的架构设计与视觉问答实现原理 【免费下载链接】LAVIS LAVIS - A One-stop Library for Language-Vision Intelligence 项目地址: https://gitcode.com/gh_mirrors/la/LAVIS 语言视觉智能库LAVIS、视觉问答VQA、多模态AI、BLIP模…...
Z-Image-Turbo在艺术创作中的实战:将文字灵感转化为超写实画作
Z-Image-Turbo在艺术创作中的实战:将文字灵感转化为超写实画作 你是否曾经有过绝妙的创意画面,却苦于无法将其具现化?Z-Image-Turbo极速云端创作室正是为解决这一痛点而生。这个基于先进AI技术的文生图工具,能够将你的文字描述在…...
RPA+AI市场进入精细化竞争阶段,企业选型逻辑正在改变
IDC最新数据显示,中国RPAAI解决方案市场规模已达31.5亿元,竞争格局呈现“头部集中、市场分散”特征:金智维以10.1%份额位居第一,艺赛旗(9.1%)、来也科技(8.4%)紧随其后,前…...
【架构实战】健康检查与故障转移机制
一、为什么需要健康检查 在分布式系统中,服务实例可能因为各种原因变得不可用,而调用方却毫不知情,继续向故障实例发送请求,导致大量失败。常见的服务不可用场景:- 进程假死:Java进程存在但无法响应请求&am…...
掌握TegraRcmGUI:从入门到精通的Switch注入实践指南
掌握TegraRcmGUI:从入门到精通的Switch注入实践指南 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI是一款基于C开发的图形化界面工具…...
Mac用户的移动Win10工坊:从WTG配置到驱动、激活、文件共享的完整避坑指南
Mac用户的移动Win10工坊:从WTG配置到驱动、激活、文件共享的完整避坑指南 当Mac用户需要运行Windows应用时,双系统方案往往是最佳选择。而通过Windows To Go(WTG)技术将Win10安装在移动硬盘上,不仅保留了Mac原生系统的…...
Pixel Couplet Gen部署案例:混合云架构(公有云API+私有云模型)方案
Pixel Couplet Gen部署案例:混合云架构(公有云API私有云模型)方案 1. 项目背景与价值 Pixel Couplet Gen是一款融合传统春节文化与现代像素艺术风格的AI春联生成器。该项目基于ModelScope大模型驱动,通过创新的8-bit像素游戏UI设…...
