C# BST 搜索方法实现,"Not all code paths return a value"

C# BST search method implementation, "Not all code paths return a value"

我正在尝试在 C# 中实现二叉搜索树的搜索方法。我选择递归而不是迭代地进行。该方法基本上采用密钥(在本例中为 "item")和树(或子树)的根节点开始检查。 else if 子句中肯定有问题,但我无法查明。任何帮助将不胜感激。干杯!

public bool Search(int item, TreeNode searchRoot){

        if (searchRoot != null) {
            if (item == searchRoot.GetItem ()) {
                return true;
            } else if (item < searchRoot.GetItem ()) {
                Search (item, searchRoot.GetLeftNode ());
            } else if (item > searchRoot.GetItem ()) {
                Search (item, searchRoot.GetRightNode ());
            }
        } else {
            return false;
        }
    }
public bool Search(int item, TreeNode searchRoot){

    if (searchRoot != null) {
        if (item == searchRoot.GetItem ()) {
            return true;
        } else if (item < searchRoot.GetItem ()) {
            return Search (item, searchRoot.GetLeftNode ());
        } else if (item > searchRoot.GetItem ()) {
            return Search (item, searchRoot.GetRightNode ());
        }
    } else {
        return false;
    }
}

这应该可以修复您的代码。您需要为递归调用添加 return。并且,return 在第一个 if 中满足所有条件。将最后一个 else-if 更改为 else 应该可以正常工作。

public bool Search(int item, TreeNode searchRoot)
{
    if (searchRoot != null)
    {
        if (item == searchRoot.GetItem ())
            return true;
        else if (item < searchRoot.GetItem ())
            return Search (item, searchRoot.GetLeftNode ());
        else 
            return Search (item, searchRoot.GetRightNode ());
    }
    else
        return false;
}