0

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

链接中指定的图像中。我应该得到标签 C 的以下 o/p

A->B

一种

作为输出。

我知道所有可能的标签。假设标签的范围可以从 A 到 J。

树的节点类是:

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

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

4

1 回答 1

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)来打印实际路径...

于 2013-03-19T19:41:27.587 回答