zoukankan      html  css  js  c++  java
  • PAT 甲级 1110 Complete Binary Tree (25 分)

    思路:

    1.首先设定root等于1+2+…+n,即(n-1)*n/2,然后每输入一个孩子,如果它不是空的,就减去相应值,最后就会得到根节点;
    2.用vector<int,pair<int,int>>存储每个结点的状态,孩子为空设值为-1;
    3.利用队列层次遍历二叉树,同时在循环外用值记录当前遍历到的结点,因为最后可能会输出最后遍历到的结点;
    4.如果遍历到孩子为空的情况,接下来的遍历如果有孩子不为空的情况,那么这棵树就不是完全二叉树;

    代码:

    #include<iostream>
    #include<vector>
    #include<queue>
    #include<string>
    using namespace std;
    vector<pair<int,int>> v;
    int main(){
    	int n,find=false,flag=true,val;
    	cin>>n;
    	int root=n*(n-1)/2;
    	v.resize(n);
    	for(int i=0;i<n;i++){
    		string a,b;
    		cin>>a>>b;
    		v[i].first=(a!="-"?stoi(a):-1);
    		v[i].second=(b!="-"?stoi(b):-1);
    		if(~v[i].first) root-=v[i].first;
    		if(~v[i].second) root-=v[i].second;
    	}
    	queue<int> q;
    	q.push(root);
    	while(!q.empty()&&flag){
    		val=q.front();
    		if(~v[val].first){
    			q.push(v[val].first);
    			if(find) flag=false;
    		}
    		else if(!find) find=true;
    		if(~v[val].second){
    			q.push(v[val].second);
    			if(find) flag=false;
    		}
    		else if(!find) find=true;
    		q.pop();
    	}
    	if(flag) printf("YES %d",val);
    	else printf("NO %d",root);
    	return 0;
    }
    
  • 相关阅读:
    mysql中group by和order by混用 结果不是理想结果
    jquery点击弹框外层关闭弹框
    https soap链接示例
    微信更改分享图片和分享链接的方法
    OPENSSL安装
    php获取csv数据无乱码
    实例讲解Nginx下的rewrite规则 来源:Linux社区
    php https链接
    PHP CURL HTTPS POST
    php生成二维码
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12309005.html
Copyright © 2011-2022 走看看