#P1095. Trees Made to Order
Trees Made to Order
描述
我们可以使用以下方案对二叉树进行编号:
- 空树编号为 。
- 单节点树编号为 。
- 所有具有 个节点的二叉树的编号小于所有具有 个节点的二叉树的编号。
- 任何具有 个节点且左子树为 、右子树为 的二叉树,其编号为 ,使得所有编号大于 的具有 个节点的二叉树,要么左子树的编号高于 ,要么左子树等于 且右子树的编号高于 。
以下展示了此序列中的前 10 棵二叉树以及编号为 20 的二叉树:

你在这个问题中的任务是,当给定二叉树的序号时,输出该二叉树。
输入
输入由多个问题实例组成。每个实例由一个整数 组成,其中 。当 时,输入终止。(请注意,这意味着你永远不需要输出空树。)
输出
对于每个问题实例,你应该输出一行,其中包含与该实例的序号相对应的二叉树。使用以下方案来打印二叉树:
- 没有子节点的树应输出为
X
。 - 具有左子树 和右子树 的树应输出为
(L')X(R')
,其中 和 是 和 的表示形式。 - 如果 为空,只需输出
X(R')
。 - 如果 为空,只需输出
(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)
来源
2001 年北美中东部地区竞赛