题解 | 树查找
树查找
https://www.nowcoder.com/practice/9a10d5e7d99c45e2a462644d46c428e4
#include <stdio.h>
#include <iostream>
#include <vector>
#include <map>
#include <math.h>
using namespace std;
int main() {
int n;
scanf("%d", &n);
int level = 0;//根节点为第零层
int capacity = 1; //当前层级满二叉树树可以的容纳的节点总数
map<int, vector<int>> tree;//键为层级,值为当前层的节点值 当输入层级是查找到即可直接输出对应的值
for(int i = 1; i <= n; i++) {
int num;
scanf("%d", &num);
if(i <= capacity) {
if(tree.find(level) != tree.end()) {
tree[level].push_back(num);
}else {
tree.insert({level, {num}});
}
} else {
level++;
capacity += pow(2,level);
tree.insert({level, {num}});
}
}
int k;
scanf("%d", &k);
map<int, vector<int>>::iterator it;
it = tree.find(k - 1); //因为层级从0开始 所以在找的时候要减1
if(it != tree.end()) {
vector<int>::iterator it1;
it1 = it->second.begin();
int size = it->second.size();
while(size != 1) {
printf("%d ", *it1);
it1++;
size--;
}
printf("%d\n", *it1);
} else {
printf("EMPTY");
}
}
查看10道真题和解析
OPPO公司福利 1202人发布