PAT 1115. Counting Nodes in a BST (30) 搜索树建立 + 各层节点数量判断

来源:互联网 发布:网络会员管理系统免费 编辑:程序博客网 时间:2024/06/06 04:46
#include<iostream>#include<cstdio>#include<algorithm>#include<queue>#include<string.h>#include<cmath>using namespace std;//35min//耗时于读题,改bug/*************************题意:给出一串序列,构成二叉平衡树(Binary Search Tree)求最后两层的节点数量之和*************************//************************求解要点:1.树的构建简单,用指针做。2.求解最后两层可以不需要遍历。每次当节点插入时,判断当前所处层数,并更新ans数组即可每当有新层数即level>=size()时,push一个1进去否则就让ans[level]++。最终只需要输出ans最后2个元素的值即可。************************//***********************笔记:*********************/#define M 1100#define INF 2000struct Node{int data;Node *Left,*Right;int level;};vector<int> ans;void BSTinsert(Node *node,int num,int level){if(node->data ==INF){node->data=num;node->Left=(Node *)malloc(sizeof(Node));node->Left->data=INF;node->Right=(Node *)malloc(sizeof(Node));node->Right->data=INF;//当前层数为ans下标,若没有就push一个。if(ans.size()<=level){ans.push_back(1);}elseans[level]++;return ;}if(num<=node->data){BSTinsert(node->Left,num,level+1);}else BSTinsert(node->Right,num,level+1);}int main(){int n,i,num;scanf("%d",&n);Node *root=(Node *)malloc(sizeof(Node));root->data=INF;for(i=0;i<n;i++){scanf("%d",&num);BSTinsert(root,num,0);}int a,b;a=ans[ans.size()-1];b=ans[ans.size()-2];printf("%d + %d = %d\n",a,b,a+b);}

原创粉丝点击