[二叉查找树] 1115. Counting Nodes in a BST (30)
1115. 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:9 25 30 42 16 20 20 35 -5 28Sample Output:
2 + 4 = 6
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <vector> #include <queue> using namespace std; const int maxn=10000; struct Node { int data; int layer; Node *lchild,*rchild; }; void insert(Node * & root,int data) { if(root==NULL) { root=new Node; root->lchild=NULL; root->rchild=NULL; root->data=data; return ; } if(root->data<data) insert(root->rchild,data); else insert(root->lchild,data); } int max_layer=0; int layer[maxn]={0}; void layerOrder(Node * root) { queue<Node *> q; root->layer=1; q.push(root); while(!q.empty()) { Node * now=q.front(); q.pop(); if(now->layer>max_layer) max_layer=now->layer; layer[now->layer]+=1; if(now->lchild!=NULL) { now->lchild->layer=now->layer+1; q.push(now->lchild); } if(now->rchild!=NULL) { now->rchild->layer=now->layer+1; q.push(now->rchild); } } } int main() { int n; cin>>n; Node * root=NULL; for(int i=0;i<n;i++) { int input; cin>>input; insert(root,input); } layerOrder(root); int a=layer[max_layer]; int b=layer[max_layer-1]; cout<<a<<" + "<<b<<" = "<<a+b<<endl; return 0; }