【问题标题】:C# BST search method implementation, "Not all code paths return a value"C# BST 搜索方法实现,“并非所有代码路径都返回值”
【发布时间】:2015-10-03 17:48:04
【问题描述】:

我正在尝试在 C# 中实现二叉搜索树的搜索方法。我选择递归而不是迭代。该方法基本上采用键(在本例中为“项目”)和树(或子树)的根节点来开始检查。 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;
        }
    }

【问题讨论】:

  • return Search (item, searchRoot.GetLeftNode ()); 等,else 在第一个 if 的末尾。

标签: c# binary-search-tree


【解决方案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;
}

【讨论】:

    【解决方案2】:
    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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-14
      • 1970-01-01
      相关资源
      最近更新 更多