题目描述
给定一棵二叉搜索树和一个整数 ,请删除节点值等于 的节点,并保证删除后的树仍然满足二叉搜索树的性质。
如果树中不存在这个值,原树保持不变。如果待删除节点同时有左、右子树,可以使用它的中序前驱或中序后继完成替换,因此正确的结果可能不止一种,评测会接受任意一种合法结果。
输入格式
第一行一个整数 ,表示二叉树的节点数。节点编号为 到 ,根节点编号为 ;当 时表示空树。
当 时,第二行包含 个整数 ,其中 表示节点 保存的值。
接下来 行,第 行包含两个整数 ,分别表示节点 的左孩子编号和右孩子编号。编号 表示相应孩子不存在。输入保证这些数据构成一棵合法二叉树。
最后一行输入一个整数 ,表示需要删除的节点值。
输出格式
输出删除节点后的二叉搜索树,并按照层序遍历顺序将结果中的节点重新编号为 到 。
如果结果为空,只输出一行整数 0。否则第一行输出节点数 ,第二行输出重新编号后各节点的值,接下来 行分别输出每个节点的左、右孩子编号;编号 0 表示相应孩子不存在。
0
100000
0
8
-42858 -100000 100000 -71429 71428 -14286 14285 42857
2 3
0 4
5 0
0 0
6 0
0 7
0 8
0 0
99999
8
-42858 -100000 100000 -71429 71428 -14286 14285 42857
2 3
0 4
5 0
0 0
6 0
0 7
0 8
0 0
6
60000 20000 100000 -100000 -20000 -60000
2 3
4 0
0 0
0 5
6 0
0 0
-100000
5
60000 20000 100000 -20000 -60000
2 3
4 0
0 0
5 0
0 0
数据范围与约定
- 节点数的范围 [0, ]
- ≤ v_i ≤
- 节点值唯一
- root 是合法的二叉搜索树
- ≤ key ≤