Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在非二叉树中查找特定节点?_Java_Tree - Fatal编程技术网

Java 如何在非二叉树中查找特定节点?

Java 如何在非二叉树中查找特定节点?,java,tree,Java,Tree,我有一个包含多个节点的树。每个节点都有一个父节点(根节点为null)、一个名称(name)和一个哈希表(children),该哈希表将子节点的名称映射到子节点对象 给定节点的字符串名称,我想创建一个方法,该方法在树中迭代以查找特定节点并返回它。如果节点不存在,则返回null 我认为递归方法最好。到目前为止,我有: public Node findNode(Node n, String s) { if (n.name == s) { return n; } else {

我有一个包含多个节点的树。每个节点都有一个父节点(根节点为null)、一个名称(name)和一个哈希表(children),该哈希表将子节点的名称映射到子节点对象

给定节点的字符串名称,我想创建一个方法,该方法在树中迭代以查找特定节点并返回它。如果节点不存在,则返回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语句放在哪里

如果孩子有它,那么就把它还给他。如果不是,则返回
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;
}

下面是Java 11+版本,使用
可选
搜索节点

公共可选搜索(节点、字符串指针){
if(node.getValue().equals(指针)){
返回可选的.of(节点);
}否则{
for(变量child:node.getChildren()){
var结果=搜索(子项、指针);
if(result.isPresent()){
返回结果;
}
}
}
返回可选的.empty();
}

这是一个很好的答案,我想指出,for中的“if(result!=null){…”对于避免返回null值而不是搜索的notnull值非常重要。谢谢!