浙大2016上机考研题
来源:互联网 发布:日本人怕中国吗 知乎 编辑:程序博客网 时间:2024/05/17 05:18
D. Counting Nodes in a BST (30)
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 28Sample 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; }
- 浙大2016上机考研题
- 2012 浙大考研上机题汇总
- 考研浙大
- 2011浙大上机题 Median
- 浙大历年考研真题(1)
- 南理工2016考研复试上机题男女程序员排队
- 浙大2008年复试上机题1
- 浙大2008年复试上机题4
- 2012浙大复试上机题Helloworld
- 07年浙大复试上机题
- 2013浙大计算机复试上机题
- 浙大考研经验谈
- HDU 1228 A + B 的浙大考研题
- 西电09计算机考研上机题
- 华科历年考研上机题整理
- 华科大考研上机题-最大两个数
- 华中科技大学计算机历年考研复试上机题
- 九度考研真题 浙大 2005-1浙大1013:开门人和关门人 排序
- 使用.net实现邮件发送
- ssl例五
- SERVLETJSP学习(九)—— EL、JSTL
- LeetCode-53.Maximum Subarray
- 动态规划:最长子序列问题
- 浙大2016上机考研题
- 高级映射:一对多查询
- [POJ2663]Tri Tiling(dp)
- Android适配文件夹的创建
- 计算机硬件构成
- Nodejs Error: EMFILE
- 求一元二次方程的解
- MyBatis Review——动态sql
- android异步初级