我一直在研究BST搜索方法,该方法返回一个布尔值,指示被搜索的值是否存在于树中,这段代码中有什么问题?然而,在返回true之后,控制再次转到:else if block.Can有人告诉我我做错了什么?
帮助将受到高度赞赏。谢谢!
public class Node
{
public int Value { get; set; }
public Node Left { get; set; }
public Node Right { get; set; }
public Node(int value, Node left, Node right)
{
Value = value;
Left = left;
Right = right;
}
}
public class BinarySearchTree
{
public static bool Search(Node root, int value)
{
if (root!=null)
{
if (root.Value == value)
{
return true;
}
else if (root.Value < value)
{
Search(root.Right, value);
}
else
{
Search(root.Left, value);
}
}
return false;
}
public static void Main(string[] args)
{
Node n1 = new Node(1, null, null);
Node n3 = new Node(4, null, null);
Node n2 = new Node(2, n1, n3);
bool flag = Search(n2, 4);
//flag should be true
Console.WriteLine("************* " + flag);
Console.ReadKey();
}
}
答案 0 :(得分:1)
您需要返回每次调用方法的结果。目前,当控件进入else/if
或else
块时,您忽略了从该方法返回的结果。
此外,您不需要布尔标志只使用条件if (root != null)
。
public static bool Search(Node root, int value)
{
if (root != null)
{
if (root.Value == value)
return true;
else if (root.Value < value)
return Search(root.Right, value);
else
return Search(root.Left, value);
}
return false;
}