算法笔记练习 题解合集
题目
题目描述
有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。该树是完全二叉树。
输入
输入有多组数据。
每组输入一个n(1<=n<=1000),然后将树中的这n个节点依次输入,再输入一个d代表深度。
输出
输出该树中第d层得所有节点,节点间用空格隔开,最后一个节点后没有空格。
样例输入
5
1 2 3 4 5
7
7
1 2 3 4 5 6 7
2
0
样例输出
EMPTY
2 3
思路
首先,因为是完全二叉树,所以可以用数组来存储。
输入的时候逐层输入,参考代码中的getBinaryTree
函数。
输入结束后根据要求的层数先算出该层的第一个结点编号start
,再根据不同情况分类讨论即可。
代码
#include <iostream>
#include <vector>
using namespace std;
int n, input, level;
vector<int> binaryTree(1024);
void getBinaryTree() {
for(int start = 1; start <= n; start *= 2)
for (int i = start; i < min(start * 2, n + 1); ++i)
scanf("%d", &binaryTree[i]);
}
void output() {
bool flag = false;
int start = 1;
scanf("%d", &level);
while (--level)
start *= 2;
for (int i = start; i < min(start * 2, n); ++i) {
if (i > start)
putchar(' ');
printf("%d", binaryTree[i]);
flag = true;
}
printf("%s\n", flag ? "" : "EMPTY");
}
int main() {
while (scanf("%d", &n) != EOF && n) {
getBinaryTree();
output();
}
return 0;
}