我有一棵树(不是二叉树),我希望从根节点到所有叶子获取路径。 例如;
A
/ | \
B C D
/ \ | / \
E F G H I
我想获得所有路径= {[A,B,E],[A,B,F],[A,C,G],[A,D,H], [A,D,I]}
到目前为止我所做的是;
我有一个Graph类;
public class Graph {
static class Node{
String name;
HashSet<Edge> inEdges;
HashSet<Edge> outEdges;}
static class Edge{
Node from;
Node to;
String id;}
}
我用这个片段遍历树;
void printAllPaths(rootNode, list) {
System.out.println(rootNode.name);
list.add(rootNode.name);
int childCount = rootNode.outEdges.size();
if (childCount == 0) {
System.out.println(list);
list.pop();//one for node
list.pop();//one for edge
} else {
for (Graph.Edge e : rootNode.outEdges) {
System.out.println(e.id);
list.add(e.id);
printAllPaths(e.to, list, rootNodeReplica);
}
}
}
我基本上做的是;
然而; 当算法完成B节点分支并移动到C;列表仍保留{A Edge B},但是当更改分支时,它应该只包含节点A.这样我的路径就变成了; 边缘B边缘C边缘G 不边缘C边缘G 。
我该如何解决这个问题? 提前致谢 亲切的问候
答案 0 :(得分:-1)
让我们看看问题的简单版本。说,我们给定一个链A -- B -- E
。我们打印以下三角形。
A
A B
A B C
A B C
A B
A
我们可以使用递归吗?当然可以!
void printEachPath(currentRoot, stack) {
if (currentRoot == null) return;
stack.push(currentRoot.name);
print stack;
printEachPath(currentRoot->next, stack);
print stack;
stack.pop(currentRoot.name);
}
我希望你能得到一些暗示。