P10163: 序列树

传统题
1.000s 时间限制
10MB 内存限制
1 提交
1 解决

【题目描述】
我们可以按照如下规则来给二叉树编号:
空树的编号是0;
单结点的树的编号是1;
所有包含m个结点的二叉树的编号比任意一个包含m+1个结点的二叉树的编号小;
任何一个包含m个结点,并且有左子树(称作L)和右子树(称作R)的二叉树,如果它的编号为n,那么所有包含m个结点的编号大于n的二叉树或者它的左子树的编号不小于L的编号,或者它的右子树的编号大于R的编号。


下面列出的是前10个二叉树和编号为20的二叉树:

你的任务是根据给定的编号,输出对应的二叉树


【输入】
输入只有一行,包含一个整数n(1 <= n <= 500,000,000
【输出】
输出只有一行,按照如下规则,输出对应编号的二叉树:
如果一棵二叉树没有子树,应当输出X;
如果一棵二叉树有左子树L和右子树R,应当输出(L')X(R'),其中L'和R'分别代表左子树L和右子树R;
如果左子树为空,输出X(R');
如果右子树为空,输出(L')X。
【样例输入】复制
20
【样例输出】 复制
((X)X(X))X

题目类型~

递归 

咻咻~

提交答案 状态