【问题标题】:Given parent node array, print out preorder traversal of the tree给定父节点数组,打印出树的前序遍历
【发布时间】:2023-03-23 17:27:01
【问题描述】:

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

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

这是一个困扰我好几天的面试题。我能想到的是使用哈希映射map<int,list<node> >,其中键是父ID。那我就不能更进一步了。我应该从地图构建树并进行前序遍历,还是有直接从地图中进行的好方法?那怎么办?任何提示表示赞赏!

【问题讨论】:

  • 有什么东西可以指定孩子的顺序吗?您可以在构建地图时标记根节点,然后从根开始按顺序遍历该地图。

标签: data-structures tree preorder


【解决方案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);
}

【讨论】:

  • 很好的答案。一个 DFS 就足够了。
猜你喜欢
  • 2011-03-01
  • 1970-01-01
  • 2010-10-05
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 2011-02-10
相关资源
最近更新 更多