1494 - 树查找

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。该树是完全二叉树。

题目输入


输入有多组数据。<br />

每组输入一个n(1<=n<=1000),然后将树中的这n个节点依次输入,再输入一个d代表深度。

<br />

题目输出


输出该树中第d层得所有节点,节点间用空格隔开,最后一个节点后没有空格。

<br />

输入/输出样例

输入格式

5
1 2 3 4 5 
7
7
1 2 3 4 5 6 7 
2
0

输出格式

EMPTY
2 3

C语言解答

#include <stdio.h>
#include <string.h>

int main(void)
{
	int arr[1001];
	int i,s;
	int n,d;
	while(scanf("%d",&n)==1)
	{
		if(n==0)break;
		for(i=1;i<=n;i++)
			scanf("%d",arr+i);
		scanf("%d",&d);
	    for(s=1,i=1;i<=d-1;i++)
            s=s*2;
		if(n<s)
			printf("EMPTY\n");
		else
		{
			for(i=s;i<=n&&i<=2*s-2;i++)
				printf("%d ",arr[i]);
			printf("%d\n",arr[i]);
		}
	}
	return 0;
}

C++解答

#include <stdio.h>
int n;
void run()
{
	int i,a[1111],d,s=1,e;
	for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
	scanf("%d",&d);
	for(i=1;i<d;i++)
	{
		s*=2;
		if(s>n)
		{
			printf("EMPTY\n");
			return;
		}
	}
	e=s*2-1;
	if(e>n)
		e=n;
	for(i=s;i<e;i++)
		printf("%d ",a[i]);
	printf("%d\n",a[e]);
}
int main()
{
	scanf("%d",&n);
	while(n!=0)
	{
		run();
		n=0;
		scanf("%d",&n);
	}
	return 0;
}