原文:我的个人博客
原题链接
1110 Complete Binary Tree (25分)
考点
二叉树
思路
判断是否为完全二叉树这个题目让我想到了这一道题 。有机会大家可以去看一下,里面是利用二叉树的层次遍历解决。这里将使用相同的方法,但是稍微改进了一下。
输入的节点序列可能是两位数,我刚开始用char来记录。。要不然3、4、5测试点永远过不去。
代码
#include <iostream>
#include <map>
#include <queue>
#include <sstream>
using namespace std;
int has[510]={0};
int root,cnt=0,lastLeaf=-1;
int tree[35][2];
void check(int root){
queue<int> q;
q.push(root);
int temp=-1;
while(!q.empty()){
lastLeaf = temp;
temp = q.front();
q.pop();
if(temp ==-1)break;
q.push(tree[temp][0]);
q.push(tree[temp][1]);
cnt++;
}
}
int sti(string s){
stringstream ss;
int ans;
ss<<s;
ss>>ans;
return ans;
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
string l,r;
cin>>l>>r;
if(l=="-"){
tree[i][0]=-1;
}else{
tree[i][0] = sti(l);
has[tree[i][0]] = 1;
}
if(r=="-"){
tree[i][1]=-1;
}else{
tree[i][1] = sti(r);
has[tree[i][1]]=1;
}
}
for(root=0;has[root]==1;)root++;
check(root);
if(cnt==n){
cout<<"YES "<<lastLeaf;
}else{
cout<<"NO "<<root;
}
return 0;
}