当前位置: 首页 > 知识库问答 >
问题:

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

公羊俊
2023-03-14

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

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

这是一个困扰我好几天的面试问题。我能想到的是使用哈希映射<code>映射

共有1个答案

拓拔泉
2023-03-14

所以你需要:

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);
}
 类似资料:
  • 如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?

  • 这是一个相当简单的问题,我注意到当我表示一棵树时,无论我用哪种方式(后排序,按顺序,前排序)树叶总是以相同的顺序出现,从左到右。 我只是想知道为什么,这是有原因的吗? 我刚开始研究它们,就想到了这个。 编辑: 我有一棵这样的树: 叶节点为:D、E和F 预购顺序为:A、B、D、C、E、F 顺序是:D,B,A,E,C,F 后序是:D,B,E,F,C,A 叶子节点总是从左到右出现,不管我选择哪个顺序,问

  • 本文向大家介绍C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法,包括了C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • //执行顺序遍历的递归方法

  • 我必须使用层次顺序遍历打印二叉树的节点,但以螺旋形式,即不同层次的节点应该以螺旋形式打印。 例如:如果树看起来像: 输出应为 10 5 20 25 15 6 4。 我使用的算法很简单,只是级别顺序遍历的一个小变化。我只是取了一个变量p.if变量等于1,而不是从左到右打印给定级别的顺序,如果是-1,则从右到左打印。 我得到了答案,但在歪斜树的情况下,最坏的情况复杂度可能是O(n^2)。 这个任务能有

  • 我们得到了一个有序线程的二叉树。这意味着,如果一个节点没有左子节点(右子节点),左线程(右线程)将从该节点链接到其索引前一个节点(索引后一个节点)。 你能帮我找到一个节点的父节点的伪代码或算法吗?例如(见下图),给定的节点是Q,父节点必须是I。(我们应该利用给定的想法,即二进制是有序线程) TMI:我实际上需要这个伪代码/算法来创建另一个算法,它将获得二叉树的后序继承者。