pat 1115 Counting Nodes in a BST (30)

来源:互联网 发布:单片机软件工程师具备 编辑:程序博客网 时间:2024/05/18 16:18

A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:

  • The left subtree of a node contains only nodes with keys less than or equal to the node's key.
  • The right subtree of a node contains only nodes with keys greater than the node's key.
  • Both the left and right subtrees must also be binary search trees.

Insert a sequence of numbers into an initially empty binary search tree. Then you are supposed to count the total number of nodes in the lowest 2 levels of the resulting tree.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (<=1000) which is the size of the input sequence. Then given in the next line are the N integers in [-1000 1000] which are supposed to be inserted into an initially empty binary search tree.

Output Specification:

For each case, print in one line the numbers of nodes in the lowest 2 levels of the resulting tree in the format:

n1 + n2 = n

where n1 is the number of nodes in the lowest level, n2 is that of the level above, and n is the sum.

Sample Input:
925 30 42 16 20 20 35 -5 28
Sample Output:
2 + 4 = 6

建立二叉搜索树,求最后两层的结点数目。

#include<iostream>#include<stdio.h>#include<string.h>using namespace std;#include<vector>#include<map>#include<algorithm>#include<queue>#define MS(a,b) memset(a,b,sizeof(a))int ans[3000],mm;typedef struct node{    int data;    node *left,*right;}*Tree;Tree T;void insert1(Tree &T,int num){    if(T==NULL)    {        T=new node();        T->data=num;        T->left=NULL;        T->right=NULL;      return ;    }    if(num<=T->data)insert1(T->left,num);    else insert1(T->right,num);}void dfs(Tree T,int depth){    if(T==NULL)return ;    ans[depth]++;    mm=max(mm,depth);    dfs(T->left,depth+1);    dfs(T->right,depth+1);}int main(){    /*#ifndef ONLINE_JUDGE    freopen("in.txt","r",stdin);    freopen("out.txt","w",stdout);    #endif*/    int n,num[3000],i;    scanf("%d",&n);    for(i=0;i<n;i++)    {      scanf("%d",&num[i]);     insert1(T,num[i]);    }      MS(ans,0);mm=-1;      dfs(T,0);      printf("%d + %d = %d\n",ans[mm],ans[mm-1],ans[mm]+ans[mm-1]);     return 0;}



0 0
原创粉丝点击