我从from
的输入中获取二叉树的所有边缘 parentId childId
e.g. 0 3 // means from node 0 to node 3
// 0 does not mean root of the tree.
如何从中构建树?
答案 0 :(得分:1)
这样做的一种方法是两次通过:
要组装所有链接,您可以通过构建一个由每个节点的ID键入的哈希表(或者如果您知道ID全部在0 ... N范围内的大型数组)来开始对于某些选择N)。每当您从文件中读取一行时,您都可以执行以下操作:
要查找树的根,您可以创建一组节点,这些节点是根节点的候选节点,最初是树中的每个节点。然后,您可以遍历到目前为止构建的节点。每当您发现节点v是另一个节点u的子节点时,您就可以从候选根集合中删除节点v(因为它是一个子节点)。当你完成后,你将留下所有可能的根源。如果边缘列表确实定义了二叉树,那么这将只是一个节点。如果它定义了二叉树的森林,则可以返回森林中所有树的根。
总的来说,这需要O(n)时间,其中n是边数(也是树中节点的数量,因为二叉树中的边数是节点数减1)。
如果你愿意的话,你可以将这两个传球分成一个传球;我刚刚分别描述了它们以便于演示。
希望这有帮助!
答案 1 :(得分:0)
首先构建节点id的映射到连接节点列表
然后遍历地图并创建from,来自地图中信息的链接
如果是二叉树,那么文件中缺少信息,格式应为
parent,leftChild,rightChild或
或左右总是以相同的顺序(左边第一个)和每个节点两行,第二个在下一行。