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