• 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;
    }
    
  • 相关阅读:
    es6 简介
    npm 快速开发技巧
    css清除浮动方法
    mui 总结
    7种 JS 创建对象的经典方式
    JavaScript 的 this 原理
    使用定时器
    dom 操作及方法
    JavaScript的6种继承方式及其优缺点
    贪吃蛇游戏代码
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12309006.html
Copyright © 2020-2023  润新知