PAT A1115 Counting Nodes in a BST
- 非常正直的题目,输出BST最后两层的节点数。先建树,然后bfs或dfs记录每层的节点数(dfs不需额外的数据结构),并找出最大层数。
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
struct Node{
int data;
int left,right;
};
struct Res{
int idx;
int level;
};
vector<Node> vn;
queue<Res> q;
vector<int> vl;
void insert(int root,int idx){
if(vn[idx].data <= vn[root].data){
if(vn[root].left == -1) vn[root].left = idx;
else insert(vn[root].left,idx);
}else{
if(vn[root].right == -1) vn[root].right = idx;
else insert(vn[root].right,idx);
}
}
int main(){
int num;
cin >> num;
vn.resize(num);
vl.resize(num);
int root = 0;
cin >> vn[root].data;
vn[root].left = vn[root].right = -1;
for(int i = 1;i <num;i ++){
cin >> vn[i].data;
vn[i].left = vn[i].right = -1;
insert(root,i);
}
q.push({root,0});
int max_level = 0;
while(!q.empty()){
int idx = q.front().idx;
int level = q.front().level;
vl[level] ++;
if(level > max_level) max_level = level;
q.pop();
if(vn[idx].left != -1) q.push({vn[idx].left,level + 1});
if(vn[idx].right != -1) q.push({vn[idx].right,level + 1});
}
printf("%d + %d = %d",vl[max_level],vl[max_level - 1],vl[max_level] + vl[max_level - 1]);
return 0;
}