那么我该如何解决这个问题呢?我需要一个从标准输入读取正整数n的程序,并向标准输出写入顶点集合{1,2,3 .... n}上所有不同的有根,有序,标记树的表示。
对于输出,我需要使用树L(t)
的以下线性文本表示t
:
If t is empty then L(t) = ().
If t has root n and children, in sibling order, C = (c1; c2; : : : ; ck), then
L(t) = (n, (L(c1), L(c2), : : :, L(ck)))
where, L(ci) denotes the linear textual representation of the subtree rooted at
child ci. There is a single space after each comma in the representation.
输出应该包含每行上一棵树的表示,应该是 按行词典顺序排序,以线性表示形式查看为字符串。该 输出应该不包含任何其他内容(例如虚假的换行符,提示符或 信息性消息)。 n = 1的样本输入和输出; 2;出现在下面。
enter code here
Input: 1
Output:
(1, ())
Input: 2
Output:
(1, ((2, ())))
(2, ((1, ())))
enter code here
任何帮助都将在很大程度上受到赞赏。我只需要转向一个方向。现在,我完全难过了:(
答案 0 :(得分:0)
您可以递归生成树。从root开始。根可以有0,1,2 ...(m - 1)个子节点,其中m是您要放置的顶点数。首先将(m - 1)个顶点放在根下面,然后一直向下移动到0.你将以递归方式“放置”这些顶点,因此在根下放置一个顶点作为子节点意味着再次调用相同的方法,但是这次孩子的最大数量会少一些。
你会得到两个递归的停止标准:
算法在尝试为根节点0提供子节点后完成。
对于输出L(t)
函数,似乎足以进行深度优先树遍历。递归是最容易编程的(因为这似乎是某种实际的任务,这可能是他们想要你做的)。如果您需要速度,请在Wikipedia上查找非递归深度优先树遍历算法。