首页 > 试题广场 >

树分裂

[编程题]树分裂
  • 热度指数:23 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
给定一棵二叉搜索树和一个定值,将该树分成两棵独立的二叉搜索树,要求小于给定值的树节点在一颗树上,不小于给定值的树节点在另一棵二叉树上。语言不限。


输入描述:
第一行两个正整数n,v(1<=n<=100000, 1<=v<=100000),分别表示二叉树的结点数以及给定值。

接下来n行,每行三个整数li,ri,vi,表示二叉搜索树上第i个结点的左儿子编号(0为空),右儿子编号(0为空)以及权值。

保证二叉树合法(对于所有结点有:左子树权值<=根权值<=右子树权值)。


输出描述:
输出n行,第i行输出两个整数li,ri,表示分开后第i个结点的左儿子编号和右儿子编号,如果为空请输出0,两个整数间以一个空格相间。
示例1

输入

5 2
0 0 4
3 1 2
5 4 1
0 0 2
0 0 1

输出

0 0
3 0
0 4
5 0
0 0

说明

这只是其中一个可能的答案。

备注:
任何合法的方案都可以被接受。