Java搜索具有相同标签的节点的所有路径

时间:2013-03-19 19:22:03

标签: java tree nodes

我正在尝试编写JAVA代码,该代码返回具有相同标签的所有节点的路径。

image specified in link中。我应该关注标签C

的o / p

A->乙

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

但无法理解如何编写代码。请帮忙。

1 个答案:

答案 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;
}

每条路径都会被编码为ArrayListString标签。我假设每个叶子都有一个空的孩子列表。如果在叶子中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)来打印实际路径......