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

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 小时前
8. 供应链与制造过程术语:产能
算法·制造·供应链管理·智能制造·工业工程
一只小小的芙厨5 小时前
寒假集训笔记·以点为对象的树形DP
c++·算法
历程里程碑5 小时前
普通数组----合并区间
java·数据结构·python·算法·leetcode·职场和发展·tornado
执风挽^5 小时前
Python基础编程题2
开发语言·python·算法·visual studio code
Z9fish5 小时前
sse哈工大C语言编程练习20
c语言·开发语言·算法
晓13136 小时前
第六章 【C语言篇:结构体&位运算】 结构体、位运算全面解析
c语言·算法
iAkuya6 小时前
(leetcode)力扣100 61分割回文串(回溯,动归)
算法·leetcode·职场和发展
梵刹古音6 小时前
【C语言】 指针与数据结构操作
c语言·数据结构·算法
VT.馒头6 小时前
【力扣】2695. 包装数组
前端·javascript·算法·leetcode·职场和发展·typescript
CoderCodingNo7 小时前
【GESP】C++五级练习题 luogu-P1865 A % B Problem
开发语言·c++·算法