我正在尝试编写JAVA代码,该代码返回具有相同标签的所有节点的路径。
在image specified in link中。我应该关注标签C
的o / pA->乙
A
作为输出。
我知道所有可能的标签。说标签的范围可以从A到J.
Tree的Node类是:
class Node{
String label;
int count;
List<Node> children;
public int hashCode() {
return label.hashCode();
}
public boolean equals(Object obj) {
Node other = (Node)obj;
return other.label.equals(label);
}
}
我正在尝试像
这样的东西for(each label)
start from root
search for all possible label location
print path for each label location
但无法理解如何编写代码。请帮忙。
答案 0 :(得分:0)
试试这个:
public List<List<String>> findPaths(String label) {
List<List<String>> result = new ArrayList<List<String>>();
if (label.equals(this.label)) {
result.add(new ArrayList<String>());
}
for (Node child : children) {
for (List<String> subResult : child.findPaths(label)) {
// add this.label in front
List<String> path = new ArrayList<String>();
path.add(this.label);
path.addAll(subResult);
result.add(path);
}
}
return result;
}
每条路径都会被编码为ArrayList
个String
标签。我假设每个叶子都有一个空的孩子列表。如果在叶子中children == null
,则需要检查,或者所有孩子的循环都会引发NullPointerException
。
现在,给出一些标签列表labels
和根节点root
:
for (String label : labels) {
List<List<String>> paths = root.findPaths(label);
for (List<String> path : paths) {
printPath(path);
}
}
我相信你可以制作自己的函数printPath(List<String> path)
来打印实际路径......