1115. Counting Nodes in a BST (30) PAT 甲级

来源:互联网 发布:淘宝有没有死店一说 编辑:程序博客网 时间:2024/05/17 09:09

传送门

动态链表实现

#include<stdio.h>#include<queue>using namespace std;#define MAX_N 1100typedef struct Node{    int data;    Node *lchild,*rchild;    int level;}bsnode,*BStree;int n;int level[MAX_N];void insert(BStree &root,int data){    if(root==NULL){        root=new bsnode;        root->data=data;        root->lchild=NULL;        root->rchild=NULL;        return ;    }    if(data<=root->data)    insert(root->lchild,data);    else    insert(root->rchild,data);}//void in(BStree root){//  if(root==NULL)//      return;//  in(root->lchild);//  printf("%d ",root->data);//  in(root->rchild);//}void bfs(BStree root){    queue <bsnode*> q;    root->level=0;    q.push(root);    int max=-1;    while(!q.empty()){        bsnode *node=q.front();        q.pop();        if(node->level>max){            max=node->level;        }        if(node->lchild!=NULL){            (node->lchild)->level=(node->level)+1;            q.push(node->lchild);        }        if(node->rchild!=NULL){            (node->rchild)->level=(node->level)+1;            q.push(node->rchild);        }        level[node->level]++;    }    printf("%d + %d = %d\n",level[max],level[max-1],level[max]+level[max-1]);}int main(){    scanf("%d",&n);    int data;    BStree root=NULL;    for(int i=0;i<n;i++){        scanf("%d",&data);        insert(root,data);    }    //in(root);    bfs(root);}

静态链表实现

#include<stdio.h>#include<queue>using namespace std;#define MAX_N 1100struct Node{    int data;    int lchild,rchild;    int level;}node[MAX_N];int n;void insert(int i,int &root){    if(root==-1){        root=i;        return ;    }    else{        if(node[i].data<=node[root].data)   insert(i,node[root].lchild);        else    insert(i,node[root].rchild);    }}void in(int root){    if(root==-1)        return;    in(node[root].lchild);    printf(" %d",node[root].data);    in(node[root].rchild);}void bfs(int root){    //printf("bfs\n");    queue<int> q;    int max=-1;    node[root].level=1;    q.push(root);    while(!q.empty()){        int p=q.front();        q.pop();        if(node[p].level>max){            max=node[p].level;        }        if(node[p].lchild!=-1){            node[node[p].lchild].level=node[p].level+1;            q.push(node[p].lchild);        }        if(node[p].rchild!=-1){            node[node[p].rchild].level=node[p].level+1;            q.push(node[p].rchild);        }    }    int n1=0,n2=0;    for(int i=0;i<n;i++){        if(node[i].level==max){            n1++;        }        if(node[i].level==max-1){            n2++;        }    }    printf("%d + %d = %d",n1,n2,n1+n2);}int main(){    int num;    int root=-1;    scanf("%d",&n);    for(int i=0;i<n;i++){        scanf("%d",&num);        node[i].data=num;        node[i].lchild=node[i].rchild=-1;        insert(i,root);    }    //in(root);    bfs(root);}
0 0
原创粉丝点击