浙大2016上机考研题

来源:互联网 发布:日本人怕中国吗 知乎 编辑:程序博客网 时间:2024/05/17 05:18

D. Counting Nodes in a BST (30)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

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

无奈被吞一次;

题意:建立bst树,用bfs访问最下2层节点数;

#include <stdio.h>#include <iostream>#include <string.h>#include <queue>using namespace std;struct bst{int data;bst *left;bst *right;}*bbshu;int level[1000]={0};int height=0;bst* inser(int k,bst *p){if(!p){p=new bst;p->data=k;p->right=p->left=NULL;}else if(p->data>=k){p->left=inser(k,p->left);}else if(p->data<k){p->right=inser(k,p->right);}return p;}//树的层序遍历,就是bfs,用指针写的 void bfs(bst *p){queue<bst*> Q;if(!p) return;Q.push(p);height=0;bst* last=p;bst* tail=p;level[height]=1;height=1;while(!Q.empty()){bst* temp=Q.front();if(temp==NULL) break;int k=temp->data;if(temp->left!=NULL){Q.push(temp->left);level[height]++;}if(temp->right!=NULL){Q.push(temp->right); level[height]++;}Q.pop();if(k==tail->data){tail=Q.back();last=tail;height++;}}}int main(){int k;cin>>k;bbshu=NULL;bst *point=bbshu;for(int i=0;i<k;i++){int num;cin>>num;point=inser(num,point); }bfs(point);int k1=level[height-2];int k2=level[height-3];cout<<k1<<" + "<<k2<<" = "<<k1+k2<<endl;return 0; } 


0 0