给定一个未排序的节点数组,其中节点定义为:
Node { int id;
int parent_id;
string label;
}
每个节点都有自己唯一的ID。 parent_id
在树中标识其父级。问题是如何对树进行前序遍历? (不一定是二叉树)
这是一个面试问题,困扰了我好几天。我能想到的是使用哈希映射map<int,list<node> >
,其中key是parentid。然后我不能再往前走了。我应该从地图构建树并进行前序遍历,或者是否有直接从地图中进行预处理的方法?那怎么样?任何提示都表示赞赏!
答案 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);
}