如果在树中找不到输入,如何使此递归二叉树遍历返回null?

时间:2014-08-09 04:32:15

标签: java recursion binary-tree

如果树中没有char,我不知道如何使这个递归方法返回null

BinaryTreeNode<CharData> answer; // Declare answer variable to use in findChar method

public BinaryTreeNode<CharData> findChar(char ch, BinaryTreeNode<CharData> root){

// Base Case
if (root.getValue().getChar() == ch){
        answer =  root; // If the node "root" contains the character, then answer becomes root node. 
    }
    // Otherwise finish pre-order traversal
else {

    // Check that left child is not null. If not, recursive call for left child.
    if(root.getLeft() != null){
        findChar(ch, root.getLeft());
    }

    // Check that right child is not null. If not, recursive call for right child. 
    if(root.getRight() != null)
        findChar(ch, root.getRight());
    }
    return answer;
}

据我所知,answer必须在方法之外声明,以便永远返回任何内容。

然而,问题是,当我使用for循环来搜索列表字符而BinaryTree中不存在某些字符时,为这些不存在的字符返回的答案值是回答是二叉树中存在的列表中的前一个字符。我希望这个方法返回null这样的值。

1 个答案:

答案 0 :(得分:0)

几点意见  1.由于多种原因,全局声明的answer是一个问题。  2.您错过了另一个案例:即rootnull时。  3. findChar返回一个值,你可以使用它。  4.您没有使用您拥有搜索树并始终遍历整个树的事实。我在这里假设它确实是一个搜索树,否则使用树是没有意义的。

所以我建议这样的事情:

public BinaryTreeNode<CharData> findChar(char ch, BinaryTreeNode<CharData> root){
    if (root == null) {
        return null;
    }
    if (root.getValue().getChar() == ch){
        return root;
    }
    if (root.getValue().getChar() > ch) {
        return findChar(ch, root.getLeft());
    } else {
        return findChar(ch, root.getRight());
    }
}

如果它不是二进制搜索树,那么这样就可以了:

public BinaryTreeNode<CharData> findChar(char ch, BinaryTreeNode<CharData> root){
    if (root == null) {
        return null;
    }
    if (root.getValue().getChar() == ch){
        return root;
    }
    BinaryTreeNode<CharData> answer = findChar(ch, root.getLeft());
    if (answer != null) {
        return answer;
    } else {
        return findChar(ch, root.getRight());
    }
}