java - 使用递归在二叉树中查找包含给定字符串的节点

标签 java recursion

我有这个方法,它使用递归在二叉树中查找包含指定 String 的节点。问题是它返回 null,而它应该返回包含指定名称的节点,我不确定为什么。

方法如下:

public Node getNode(Node currentNode, String name) { 
    Node retrieved = null;
    if (currentNode.getName().equals(name)) { retrieved = currentNode; }
    else 
    {
        if (currentNode.right != null) {
            getNode(currentNode.right, name);
        } 
        if (currentNode.left != null) {
            getNode(currentNode.left, name);
        }
    }
    return retrieved;
}

如果能深入了解问题所在,我们将不胜感激。

最佳答案

您需要捕获两个递归调用的返回值。否则,您将“白费力气”地进行递归并丢弃递归的结果。

public Node getNode(Node currentNode, String name){ 
    Node retrieved = null;
    if (currentNode.getName().equals(name)) { retrieved = currentNode; }
    else 
    {
        if (currentNode.right != null){
            retrieved = getNode(currentNode.right, name);
        } 
        if (retrieved == null && currentNode.left != null){
            retrieved = getNode(currentNode.left, name);
        }
    }
    return retrieved;
}

以下解决方案可以说是更好的样式,因为您将 null 检查保留为基本情况。请注意,您不再需要检查 currentNode.right != nullcurrentNode.left != null,因为在又一次递归步骤后它们已被基本情况覆盖.

public static Node getNode(Node currentNode, String name){
    // Base case: currentNode is null, nothing left to search
    if (currentNode == null) {
        return null;
    }

    Node retrieved = null;
    if (currentNode.getName().equals(name)) {
        retrieved = currentNode;
    } else {
        // Try to search right subtree
        retrieved = getNode(currentNode.right, name);

        // If not found in right subtree, then search left subtree
        if (retrieved == null){
            retrieved = getNode(currentNode.left, name);
        }
    }
    return retrieved;
}

关于java - 使用递归在二叉树中查找包含给定字符串的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49961695/

相关文章:

algorithm - 如何使用递归树求解方程 T(n) = 5T(n/5) + sqrt(n), T(1) = 1, T(0) = 0?

php - 如何从对象的数组记录集中获取嵌套的 HTML 列表?

python - 停止递归生成器和排列

java - 每个节点有多个 child 的树的搜索方法

java - 来自深层链接的空查询参数

java - 如何从参数化类型方法参数中获取参数化类型类?

recursion - Ocaml - 迭代到递归

java - Akka 基本程序无法运行

java - Spring 中的丰富 HTML 电子邮件与 Thymeleaf

java - 递归打印给定数字的所有素数