程序综合实践第十二周-二叉树

1、二叉树求高度

复制代码
#include<bits/stdc++.h>
using namespace std;
int n;
const int N=105;
struct node{
	int left;
	int right;
	int data;
}a[N];
int dfs(int r){
	if(r==0)return 0;
	int h1=dfs(a[r].left);
	int h2=dfs(a[r].right);
	return max(h1,h2)+1;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].data>>a[i].left>>a[i].right;
	}
	cout<<dfs(1);
	return 0;
}

2、二叉树非叶子

复制代码
#include<bits/stdc++.h>
using namespace std;
int n;
const int N=105;
struct node{
	int data;
	int left;
	int right;
}a[N];
void xianxu(int idx){
	if(idx==0)return;
	cout<<a[idx-1].data<<" ";
	xianxu(a[idx-1].left);
	xianxu(a[idx-1].right);
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i].data>>a[i].left>>a[i].right;
	}
	for(int i=0;i<n;i++){
		if(a[i].left!=0&&a[i].right!=0){
			a[i].data+=1;
		}
	}
	xianxu(1);
	cout<<endl;
	return 0;
}

3、钻石收藏家

复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
int main(){
	int n,k;
	cin>>n>>k;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	sort(a,a+n);
	int max_cnt=0;
	int left=0;
	for(int right=0;right<n;right++){
		while(a[right]-a[left]>k){
			left++;
		}
		max_cnt=max(max_cnt,right-left+1);
	}
	cout<<max_cnt<<endl;
	return 0;
}

4、牛奶桶Milk Pails

复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	int x,y,m;
	cin>>x>>y>>m;
	int max_cnt=0;
	for(int i=0;i*x<=m;i++){
		for(int j=0;i*x+j*y<=m;j++){
			int t=i*x+j*y;
			max_cnt=max(max_cnt,t);
		}
	}
	cout<<max_cnt<<endl;
	return 0;
}

5、我在哪?(Where am I?)

复制代码
#include<bits/stdc++.h>
using namespace std;
bool check(int n,char a[],int k){
	for(int i=1;i<=n-k+1;i++){
		for(int j=i+1;j<=n-k+1;j++){
			bool f=true;
			for(int l=0;l<k;l++){
				if(a[i+l]!=a[j+l]){
					f=false;
					break;
				}
			}
			if(f){
				return false;
			}
		}
	}
	return true;
}
int main(){
	int n;
	char a[105];
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int k=1;k<=n;k++){
		if(check(n,a,k)){
			cout<<k<<endl;
			return 0;
		}
	}
	cout<<n<<endl;
	return 0;
}

6、FBI树

复制代码
#include <bits/stdc++.h>
using namespace std;
int a[2048+10];
int len;
 
void buildTree(int root) {
	if(root>=len)return;
	buildTree(2*root);
	buildTree(2*root+1);
	if(a[2*root]==1&&a[2*root+1]==1)a[root]= 1;
	else if(a[2*root]==0&&a[2*root+1]==0)a[root]=0;
	else a[root]=2;
}
 
void dfsTree(int root) {
	if(root>=2*len)return;
	dfsTree(2*root);
	dfsTree(2*root+1);
	if (a[root]==1)cout<<"I";
	else if(a[root]==0)cout<<"B";
	else cout<<"F";
}
 
int main() {
	int n;
	string str;
	cin>>n;
	cin>>str;
	len=1<<n;
	
	for(int i=len;i<=2*len-1;i++){
		a[i]=str[i-len]-'0';
	}
	
	buildTree(1);
	dfsTree(1);
	return 0;
}

7、先序排列(后中求先)

复制代码
#include<bits/stdc++.h>
using namespace std;
void xianxu(string data,string order){
	if(data.empty()||order.empty())return;
	char r=order[order.size()-1];
	cout<<r;
	
	int pos=data.find(r);
	string left=data.substr(0,pos);
	string right=data.substr(pos+1);
	
	int left_len=left.size();
	string left_v=order.substr(0,left_len);
	string right_v=order.substr(left_len,order.size()-left_len-1);
	
	xianxu(left,left_v);
	xianxu(right,right_v);
}
int main(){
	string idx,post;
	cin>>idx>>post;
	xianxu(idx,post);
	cout<<endl;
	return 0;
}
相关推荐
啊阿狸不会拉杆5 小时前
《数字图像处理》第 3 章 - 灰度变换与空间滤波
图像处理·人工智能·算法·计算机视觉·数字图像处理
执笔论英雄5 小时前
【RL 】Ray 支持RDMA
算法
Keep_Trying_Go5 小时前
统一的人群计数训练框架(PyTorch)——基于主流的密度图模型训练框架
人工智能·pytorch·python·深度学习·算法·机器学习·人群计数
(●—●)橘子……5 小时前
记力扣557.反转字符串中的单词 练习理解
算法·leetcode·职场和发展
啊阿狸不会拉杆5 小时前
《数字图像处理 》 第 1 章-绪论
图像处理·python·opencv·算法·数字图像处理
智驱力人工智能6 小时前
加油站静电夹检测 视觉分析技术的安全赋能与实践 静电夹检测 加油站静电夹状态监测 静电接地报警器检测
人工智能·深度学习·算法·安全·yolo·边缘计算
断剑zou天涯6 小时前
【算法笔记】线段树SegmentTree
数据结构·笔记·算法
ULTRA??6 小时前
各种排序算法时间复杂度分析和实现和优势
c++·python·算法·排序算法
sprintzer6 小时前
12.06-12.15力扣分治法刷题
算法·leetcode