1115 Counting Nodes in a BST
Statement
Metadata
- 作者: CHEN, Yue
- 单位: 浙江大学
- 代码长度限制: 16 KB
- 时间限制: 400 ms
- 内存限制: 64 MB
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
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:
wheren1
is the number of nodes in the lowest level, n2
is that of the level above, and n
is the sum. Sample Input
Sample Output
Solution
#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 10;
int n, a[N], Max, ans[N];
struct BST {
struct node {
int v, son[2];
node() {
v = 0, son[0] = son[1] = 0;
}
} t[N];
int rt, tot;
void init() {
rt = 0;
tot = 0;
}
int newnode() {
++tot;
t[tot] = node();
return tot;
}
void insert(int &rt, int v, int dep) {
Max = max(Max, dep);
if (rt == 0) {
rt = newnode();
++ans[dep];
t[rt].v = v;
return;
}
if (v <= t[rt].v)
insert(t[rt].son[0], v, dep + 1);
else
insert(t[rt].son[1], v, dep + 1);
}
} bst;
int main() {
while (scanf("%d", &n) != EOF) {
Max = 0;
memset(ans, 0, sizeof ans);
bst.init();
for (int i = 1, x; i <= n; ++i) {
scanf("%d", &x);
bst.insert(bst.rt, x, 0);
}
assert(Max >= 0);
if (Max == 0) {
printf("%d + %d = %d\n", ans[Max], 0, ans[Max]);
} else {
printf("%d + %d = %d\n", ans[Max], ans[Max - 1], ans[Max] + ans[Max - 1]);
}
}
return 0;
}
Last update: May 4, 2022