题解 | 树查找

树查找

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");
	}

}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务