1115. Counting Nodes in a BST (30)

来源:互联网 发布:网络集成商 编辑:程序博客网 时间:2024/05/22 02:03
  1. 题目见这里

  2. BST结构体中add一个level变量,创建BST时,需要在add结点之前根据将来的父结点得到该结点的level值,然后就是LevelOrder了,从后往前扫描bstQ(结点队列)即可

  3. 代码如下:

#include <stdio.h>#include <stdlib.h>#define N 1005 typedef struct node{    int level;    int data;    struct node *lChild, *rChild;}BST;BST* CreatBST(int n){    int i,data;    BST *bst,*bst1,*node;    for(i=1;i<=n;i++){        node = (BST *)malloc(sizeof(BST));        scanf("%d",&(node->data));        node->lChild = node->rChild = NULL;        if(i==1){            node->level = 0;            bst = node; //此处不能赋值bst1        }        else{            bst1 = bst;            while(bst1){ //主要是为了获得下一个结点的level                 if(bst1->data<node->data){                    if(bst1->rChild==NULL){                        node->level = bst1->level + 1;                        bst1->rChild = node;                        break;                    }                    else bst1 = bst1->rChild;                   }                else{                    if(bst1->lChild==NULL){                        node->level = bst1->level + 1;                        bst1->lChild = node;                        break;                    }                    else bst1 = bst1->lChild;                }            }        }    }       return bst;}void Solve(BST *bst, int n){    BST *bstQ[N],*tmp;    int front,rear;    front = rear = 0;    bstQ[rear++] = bst;    while(front<rear){        tmp = bstQ[front++];        if(tmp->lChild) bstQ[rear++] = tmp->lChild;        if(tmp->rChild) bstQ[rear++] = tmp->rChild;    }    int res[2]={0};    int i,level;    i = 0;    front = 0;    level=bstQ[rear-1]->level;    while(rear>front){        if(bstQ[--rear]->level==level) res[i] ++;        else{             i ++;             if(i==2) break;             res[i] = 1;             level = bstQ[rear]->level;        }    }    printf("%d + %d = %d\n",res[0],res[1],res[0]+res[1]);}int main(){//  freopen("Data.txt","r",stdin);    BST *bst; //not bst,error:bst.lChild is a bst point    int n;    scanf("%d",&n);    bst = CreatBST(n);     Solve(bst,n);    return 0;}

阅览时间:
2017-07-25,23:39

原创粉丝点击