给定父节点数组,打印出树的前序遍历

时间:2013-01-01 20:29:59

标签: data-structures tree preorder

给定一个未排序的节点数组,其中节点定义为:
 Node { int id; int parent_id; string label; }

每个节点都有自己唯一的ID。 parent_id在树中标识其父级。问题是如何对树进行前序遍历? (不一定是二叉树)

这是一个面试问题,困扰了我好几天。我能想到的是使用哈希映射map<int,list<node> >,其中key是parentid。然后我不能再往前走了。我应该从地图构建树并进行前序遍历,或者是否有直接从地图中进行预处理的方法?那怎么样?任何提示都表示赞赏!

1 个答案:

答案 0 :(得分:1)

所以你需要:

map<int, list<Node> > childMap;
map<int, Node> nodeMap;

你会发现一个没有父节点的节点(parent_id = -1或者其他东西),这显然是根节点。在设置上面的地图后,您可以为该节点调用以下函数。

preOrder(int id)
{
  process(nodeMap[id]);
  foreach (Node node: childMap[id])
    preOrder(node);
}