C#BST搜索方法实现,"并非所有代码路径都返回值"

时间:2015-10-03 17:48:04

标签: c# binary-search-tree

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

2 个答案:

答案 0 :(得分:1)

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;
    }
}

答案 1 :(得分:1)

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