我使用以下单个类实例的树状数据结构:
class Human {
String name;
Human parent;
Human[] children;
}
如果我们考虑某个实例A
,它有它的父Human实例以及它的子实例的数组。
ROOT
|- A
| |-A1
| | |-A1_1
| | |-A1_2
| |-A2
|
|
|- B
所以我得到了一个叶节点(例如:A1_2
),我想从Root节点打印它的所有父节点。
例如:
ROOT > A > A2
我们可以在Java中使用while循环执行相同操作,直到parent!=null
。 (但它会以相反的顺序打印出来,所以需要一些额外的努力来反转它)
我的问题是,
修改
如果我添加一个新字段来保留祖先,我可以将其设置为下方,并可以向任何方向打印:
class Human {
String name;
Human parent;
Human[] children;
Human[] ancestors;
// getters and setters
}
public static void printTree(Human h){
List<Human> ancestors = new ArrayList<Human>();
Human parent = h.getParent();
while (parent!=null) {
ancestors.add(parent);
parent = parent.getParent();
}
h.setAncestors(ancestors.toArray(new Human[ancestors.size()]));
printUsingVelocity(h);
}