BST 构建 + 增删(模板题)
Submit solution
Points:
100
Time limit:
1.0s
Memory limit:
400M
Author:
Problem type
Allowed languages
C, C++
题目描述
实现一个不允许重复键的二叉搜索树(BST)。
先通过一条 B 指令批量构建初始树,然后执行若干 I/D 操作;
最后只输出一次当前 BST 的中序遍历(升序)。
若树为空,输出 EMPTY。
- BST 性质:任一结点
x,左子树所有键< x.val,右子树所有键> x.val。 - 不允许重复键:插入已存在的键时应忽略(树不改变)。
- 删除规则:若键不存在则忽略;有两子时可用 右子树的最小值(后继)替换。
输入格式
第一行:一条构建指令
B n x1 x2 ... xn表示依次插入这
n个整数作为初始构建(已存在的忽略)。第二行:整数
m,表示操作条数。接下来 m 行:每行一条操作,仅两种:
I x:插入x(已存在忽略)D x:删除x(不存在忽略)
输出格式
- 仅在所有操作结束后,输出一次中序遍历(升序),数之间用单个空格分隔;
- 若树为空,输出
EMPTY。
数据范围
- \(1 \le n \le 2 × 10^4,0 \le m \le 2 × 10^4\)
- 键值
x为整数,\(|x| \le 10^9\) - 初始为空树
样例
输入
B 6 5 3 7 2 4 8
5
I 6
D 7
I 10
D 2
D 42
输出
3 4 5 6 8 10
解释
初始 {2,3,4,5,7,8} → 插入 6 成为 {2,3,4,5,6,7,8} → 删 7 → {2,3,4,5,6,8} → 插 10 → {2,3,4,5,6,8,10} → 删 2 → {3,4,5,6,8,10} → 删 42(不存在,忽略)。
Comments