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

There are no comments at the moment.