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;
}