如何在非二进制树中查找特定节点?

时间:2015-10-30 05:38:48

标签: java tree

我有一个包含多个节点的树。每个节点都有一个父节点(在根的情况下为null),一个名称(名称)和一个HashTable(子),它将子节点的名称映射到子节点对象。

给定节点的字符串名称,我想创建一个迭代树的方法来查找特定节点并返回它。如果该节点不存在则返回null。

我认为递归方法最好。到目前为止,我有这个:

public Node findNode(Node n, String s) {
   if (n.name == s) {
       return n;
   } else {
       for (Node child: n.children.values()) {
            findNode(child, s);
       }
     }
}

我不确定在哪里放置null语句。

2 个答案:

答案 0 :(得分:4)

如果孩子有,请将其归还。如果没有,则返回null

public Node findNode(Node n, String s) {
    if (n.name == s) {
        return n;
    } else {
        for (Node child: n.children.values()) {
            Node result = findNode(child, s);
            if (result != null) {
                return result;
            }
        }
    }
    return null;
}

答案 1 :(得分:0)

这是Java 11+版本,使用Optional搜索节点。

public Optional<Node> search (Node node, String needle) {
    if (node.getValue().equals(needle)) {
        return Optional.of(node);
    } else {
        for (var child : node.getChildren()) {
            var result = search(child, needle);
            if (result.isPresent()) {
                return result;
            }
        }
    }

    return Optional.empty();
}