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

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;
}
相关推荐
乃瞻衡宇1 分钟前
Agent Skills 完全指南:让你的 AI Agent 拥有超能力
算法
mit6.8245 分钟前
pair<int, TreeNode*> dfs
算法
初晴や1 小时前
【C++】图论:基础理论与实际应用深入解析
c++·算法·图论
李泽辉_1 小时前
深度学习算法学习(五):手动实现梯度计算、反向传播、优化器Adam
深度学习·学习·算法
李泽辉_1 小时前
深度学习算法学习(一):梯度下降法和最简单的深度学习核心原理代码
深度学习·学习·算法
꧁Q༒ོγ꧂1 小时前
算法详解---大纲
算法
m0_603888711 小时前
Scaling Trends for Multi-Hop Contextual Reasoning in Mid-Scale Language Models
人工智能·算法·ai·语言模型·论文速览
Xの哲學1 小时前
Linux io_uring 深度剖析: 重新定义高性能I/O的架构革命
linux·服务器·网络·算法·边缘计算
comli_cn2 小时前
残差链接(Residual Connection)
人工智能·算法
Aaron15882 小时前
基于VU13P在人工智能高速接口传输上的应用浅析
人工智能·算法·fpga开发·硬件架构·信息与通信·信号处理·基带工程