c# BST搜索方法实现,“并非所有代码路径都返回一个值”

本文关键字:返回 路径 一个 代码 实现 方法 搜索 BST | 更新日期: 2023-09-27 18:15:47

我正在尝试在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;
        }
    }

c# BST搜索方法实现,“并非所有代码路径都返回一个值”

这会修复你的代码。您需要为递归调用添加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;
}
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;
    }
}