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

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;
}
相关推荐
二十七日秋7 分钟前
算法刷题笔记「Day 1|四道 OJ 入门题里的深坑」
c语言·汇编·数据结构·c++·笔记·python·算法
晚风叙码21 分钟前
Linux 进程概念(下):程序地址空间与虚拟内存
linux·服务器·算法
silvamux_41 分钟前
微头条爆款体平台适配实测:把交付要求变成可计算的指标
java·线性代数·算法·决策树·矩阵
重生之小比特1 小时前
【算法拾光】前缀和|连续的子数组和 + 和相同的二元子数组
算法·leetcode·哈希算法
一去不复返的通信er1 小时前
力扣15:盛最多水的容器
算法·leetcode
Navigator_Z1 小时前
LeetCode //C - 1309. Decrypt String from Alphabet to Integer Mapping
c语言·算法·leetcode
潇湘秦1 小时前
SQL Server 2016+ 整数类型元数据扩宽(秒级变更)完整说明
数据库·算法
Figo_Cheung3 小时前
Figo基于结构空间算法假设(SSAH)的生成式大模型优化范式与工程实现边界研究——提出适应AGI架构演化的自适应拓扑感知表征机制
算法·架构·agi
旖旎夜光3 小时前
LCR 170:交易逆序对的总数(归并排序) —— 题解
c++·学习·算法·leetcode·排序算法
微尘hjx11 小时前
【ByteTrack 04】多轨迹算法ByteTrack改进点
算法·yolo·目标检测·目标跟踪·bytetrack·ultralytics·车跟踪