Advertisement

POJ 1635 Subway Tree Systems (Advanced Guide, Minimal Representation of Trees, Recursive Methods)

阅读量:

《算法竞赛进阶指南》第91页,树的最小表示

本题关键点:
1、树的最小表示,采用01字符串形式来描述一棵树(每个节点可拥有多个子节点)。
从根节点出发,对每条边进行两次遍历。每次经过边时记录一个0或1,最终将所有字符串拼接起来即为该树的01表示。
当从父节点移动至子节点时,使用'0'表示;而从子节点返回父节点时,则用'1'表示。
若某棵子树的根为father,其子节点依次为son[1]、son[2]、…、son[n],则遍历方式如下:
father前往son[1](标记为'0'),并递归遍历son[1]的所有子节点以生成一段01字符串;随后从son[1]返回father(标记为'1');
接着father前往son[2](标记为'0'),同样递归处理son[2]的所有子节点生成另一段字符串,并返回father(标记为'1');
依此类推,直到father前往son[n](标记为'0'),完成对所有子节点的处理后返回father(标记为'1')。
最终将所有生成的字符串连接起来,即可得到以father为根的子树对应的01表示。需要注意的是,在访问各个孩子节点时顺序可以任意调整,因此会得到多个不同的01字符串。其中字典序最小的那个即被视为整棵树的最小表示。

2、递归实现方法:
对于以father为根的树结构而言,其对应的01字符串s由各个孩子

全部评论 (0)

还没有任何评论哟~