2684: 树的序号
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:0
解决:
题目描述
我们可以用下面的方案给二叉树标号:
空树的序号为 0。
只有一个根结点的树序号为 1。
所有包含 m 个结点的二叉树的序号一定比任何一个包含 m+1 个结点的二叉树的序号小。
任何一棵二叉树有 m 个结点,若它的序号为 n,其左子树序号为 L,右子树序号为 R,则所有序号大于 n 且有 m 个结点的二叉树必满足下列条件之一:
——左子树序号大于 L
——左子树序号等于 L 且右子树序号大于 R
前 5 棵二叉树的形状如下:
0 1 2 3 4
X X X X
\ / \
X X X
\
X
你的任务就是对给定的序号,输出该序号所对应的二叉树。
输入
包含多组数据,每个数据只有一个单独的整数 n(1<=n<=500,000,000)。当 n=0时表示输入文件结束,但你不必输出 n=0 时的空树。
输出
对每个数据产生一个输出,每个数据仅输出一行,表示对应序号的树。
输出树时使用下列格式:
一棵树若没有子树则输出根:X。
一棵树有左子树 L 和右子树 R 应当输出:(L')X(R'),L'和 R'为序号 L 和 R 对应的二叉树。当然,若 L=0,则输出 X(R');若 R=0,则输出(L')X。
样例输入 复制
1
20
31117532
0
样例输出 复制
X
((X)X(X))X
(X(X(((X(X))X(X))X(X))))X(((X((X)X((X)X)))X)X)