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

打印树中的所有路径(不仅仅是根到节点)

安浩瀚
2023-03-14

那么,如何打印树中的所有路径呢。这里的条件是,我们不仅需要从根开始的路径或子树中的路径。

例如:

     2
    / \
   8   10
  /\   /
 5  6 11

因此程序应该返回

2-8
2-10
2-8-5
2-8-6
8-5
8-6
2-10-11
10-11
5-8-2-10-11
5-8-2-10
and so on...

一种方法是在每个不同的节点对之间找到LCA,然后打印从LCA到两个节点的路径(在左子树中反转,在右子树中按顺序排列)。但是这里的复杂性是O(n3)。有更有效的解决方案吗?

共有2个答案

董畅
2023-03-14

假设树具有不同的节点,则可以:

按值将此映射传递给每个节点。您可以有一个函数,例如:

void printAllPaths(node *proot, map<int, vector<int> > m)

每当您遇到新的节点n时,请执行以下操作

a) 对于密钥集中的每个k

b) 将n添加到k的值向量。

c)打印所有键及其值向量。

d)还将新键作为n插入到以空向量作为值的映射中。

注意:如果你的树有重复的节点,多重映射将帮助你跟踪。在这种情况下,c STL将很好地为您服务。

裴欣然
2023-03-14

如果您只对结果感兴趣,而对算法不感兴趣,请使用以下命令在neo4j中创建节点和关系:

merge (n2:node{n:2})-[:down]->(n8:node{n:8})-[:down]->(:node{n:5})
merge (n2)-[:down]->(:node{n:10})-[:down]->(:node{n:11})
merge (n8)-[:down]->(:node{n:6})

然后查询

match p=(a)-[r:down *]-(b) return nodes(p)
 类似资料:
  • 问题内容: 我试图使用Java在二叉树中打印所有根到叶的路径。 在主要方法中: 但是它给出了错误的输出。 给定的树: 预期产量: [5,1,3] [5、8、6] [5、8、9] 但是输出产生了: [5,1,3] [5、1、3、8、6] [5、1、3、8、6、9] 可以找出一个… 问题答案: 用以下方法调用递归方法: 传递时会发生什么(而不是在所有方法调用中使用单个对象,这意味着,当您返回原始调用者

  • 我试图打印二叉树的所有路径(根到叶的路径),但没有效果。 我的策略是使用递归,基本情况是树为None或树节点为leaf return,否则,遍历树的左侧和右侧。 但我找不到同时保留左右树的方法。

  • 问题内容: 去吧,Dijkstra:打印出路径,而不仅仅是计算最短的距离。 http://play.golang.org/p/A2jnzKcbWD 我使用Dijkstra算法能够找到最短的距离,也许不是。可以在这里找到代码。 但是,如果我无法打印出路径,那将毫无用处。随着大量指针的出现,我无法弄清楚如何打印出权重最少的最终路径。 简而言之,我不仅要找到最短的距离,还要在给定的代码上打印出最短的路径

  • 我有一棵看起来像上面的树,由一个链接结构表示: 我的目标是找到从根节点到叶节点的所有路径。 我的树遍历算法如下所示: 当我运行它时,我确信树正在按图所示构建。我已经测试过了。然而,我无法找出我的树遍历分割错误的原因。 我得到的输出是: 我已经在高度较小的树上测试了它,它是有效的。但是出于某种原因,它不适用于高度大于2的树。我认为这是树出了问题,我检查并打印了每个父级、左子级和右子级,它们打印出来如

  • 本文向大家介绍Java实现打印二叉树所有路径的方法,包括了Java实现打印二叉树所有路径的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java实现打印二叉树所有路径的方法。分享给大家供大家参考,具体如下: 问题: 给一个二叉树,把所有的路径都打印出来。 比如,对于下面这个二叉树,它所有的路径为: 8 -> 3 -> 1 8 -> 2 -> 6 -> 4 8 -> 3 -> 6 ->

  • 下面的函数打印所有的子路径。是否可以只显示完整的路径,即A->B->C(包含以下所需的输出)。