我有几个列表:
A = ["a0", "a1"] // the number of lists varies
B = ["b0", "b1", "b2"] // such as the number of elements in a list.
C = ["c1"]
D = ["d0", "d1"]
我将这个结构转换成了一棵树:
_____ROOT______
/ \
___a0____ ____a1____
/ | \ / | \
b0 b1 b2 b0 b1 b2
| | | | | |
c1 c1 c1 c1 c1 c1
/ | / | / | / | / | / |
d0 d1 d0 d1 d0 d1 d0 d1 d0 d1 d0 d1
我正在打印树中每条唯一路径(省略根节点):
a0 -> b0 -> c1 -> d0
a0 -> b0 -> c1 -> d1
a0 -> b1 -> c1 -> d0
...
a1 -> b2 -> c1 -> d1
我正在通过以下方式遍历树,同时“销毁”树本身:
public static void delete(Node node) {
if (node.isLeaf() && !node.isRoot()) {
Node parent = node.getParent();
parent.removeChild(node);
delete(parent);
}
}
public static void traverse(Node node) {
if (node.isRoot())
System.out.println("---");
else
System.out.println(node.getName());
if (node.isLeaf()) { // I'm still working on
if (!node.isRoot()) { // removing unnecessary checks
delete(node);
traverse(node.getRoot());
}
} else {
Node child = node.firstChild();
if (null != child)
traverse(child);
}
}
traverse(Node)
函数总是打印出树的第一条可用路径(从根到叶子节点),而delete(Node)
函数则删除已被traverse(Node)
访问过的叶子节点。
虽然这种方法可以达到预期效果,但我很想找到一种在不破坏树的情况下以前述方式遍历树的解决方案。如果有这样的方法,我会对以图形的形式遍历相同结构(以减少冗余)感兴趣。