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