递归搜索二进制树以获取字符串值

时间:2012-11-21 03:53:07

标签: java recursion

我有一个只应该包含唯一字符串值的二叉树。在输入新字符串(由用户完成)之前,我需要递归检查树以查看字符串是否已存在。这是我提出的方法,但它只找到了某些值(我相信的根和左)。任何有关如何解决此问题的提示都表示赞赏!

public static TreeNode wordExists(TreeNode root, String strInput){
    if (root != null){

    if (strInput.equals(root.dataItem))
    {
        return root;
    }
    if (root.left != null){
        return wordExists (root.left, strInput);
    }
    if (root.right != null){
        return wordExists (root.right, strInput);
        }
    }
    return null;
}

1 个答案:

答案 0 :(得分:2)

当你向下导航每个分支时,你需要在返回之前检查结果。否则,如果结果只在右侧分支中,但左侧有其他非空值,则只返回null,因为在左侧路径中找不到它。

所以而不是

if (root.left != null) {
    return wordExists(root.left, strInput);
}
if (root.right != null) {
    return wordExists(root.right, strInput);
}

你可能会做类似

的事情
TreeNode result;
if ((result = wordExists(root.left, strInput)) != null) {
    return result;
}
return wordExists(root.right, strInput);

你可以逃脱第二次递归的快捷方式,因为如果它失败了,你只会返回null。