BUPT复试专题—树查找(2011)
https://www.nowcoder.com/practice/9a10d5e7d99c45e2a462644d46c428e4?tpId=67&tqId=29641&rp=0&ru=/kaoyan/retest/1005&qru=/ta/bupt-kaoyan/question-ranking
题目描述
有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。该树是完全二叉树。
输入描述:
输入有多组数据。
每组输入一个n(1<=n<=1000),然后将树中的这n个节点依次输入,再输入一个d代表深度。
输出描述:
输出该树中第d层得所有节点,节点间用空格隔开,最后一个节点后没有空格。
示例1
输入
4
1 2 3 4
2
输出
2 3
完全二叉树如果不是最后一层则该层节点数目固定可以先打表,最后一层单独算即可
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<string.h> using namespace std; int main() { int num,exl[10];exl[1]=1; for(int i=2;i<=11;i++) exl[i]=exl[i-1]*2; while(scanf("%d",&num)!=EOF) { int donser[1001],deep; for(int i=1;i<=num;i++) scanf("%d",&donser[i]); scanf("%d",&deep); int temp=1,sum=0; while(temp!=deep) { num-=exl[temp]; sum+=exl[temp]; temp++; if(num<0) { num=0; break; } //cout<<"num:"<<num<<" sum:"<<sum<<" temp:"<<temp<<" exl:temp:"<<exl[temp]<<endl; } if(num==0) { cout<<"EMPTY"<<endl; continue; } if(num>=exl[temp]) { for(int i=sum+1;i<=sum+exl[temp];i++) { cout<<donser[i]; if(i!=sum+exl[temp]) cout<<" "; } } else { for(int i=sum+1;i<=sum+num;i++) { cout<<donser[i]; if(i!=sum+num) cout<<" "; } } cout<<endl; } return 0; }