九度OJ——1176树查找

来源:互联网 发布:bp神经网络算法步骤 编辑:程序博客网 时间:2024/06/06 09:55

题目描述:
有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。该树是完全二叉树。
输入:
输入有多组数据。
每组输入一个n(1<=n<=1000),然后将树中的这n个节点依次输入,再输入一个d代表深度。
输出:
输出该树中第d层得所有节点,节点间用空格隔开,最后一个节点后没有空格。
样例输入:
4
1 2 3 4
2
样例输出:
2 3


思路:
用数组存储完全二叉树,首先找到指定层的定一个元素的下标i,判断2*i-1(对应满二叉树的该层的最后一个元素)是否属于这个完全二叉树,若是则打印从i到2*i-1的元素,若不是但i是则打印从i到N的元素,否则输出EMPTY。
AC代码:

#include <iostream>#include <cmath> #include <cstring>using namespace std;int Tree[1001] = {0};int N,level,start;int main(){    while(cin>>N){        memset(Tree,0,sizeof(Tree[0])*1001);        for(int i = 1 ; i <= N ; i++){            cin>>Tree[i];        }        cin>>level;        start = 1;        while(level > 1){            start *= 2;            level--;        }        if(start*2-1 <= N){//该层最后一个结点属于二叉树             cout<<Tree[start];            for(int i = start+1 ; i <= start*2-1 ; i++){                cout<<" "<<Tree[i];                 }               }else if(start <= N && start*2-1 > N){            cout<<Tree[start];            for(int i = start+1 ; i <= N ; i++){                cout<<" "<<Tree[i];             }        }else{            cout<<"EMPTY";        }        cout<<endl;     }    return 0; } 
原创粉丝点击