2017-05-07 64 views
0

我一直在努力,它返回指示是否正在搜索的价值在树中的存在与否,什么是错在这段代码的布尔值BST搜索方法?但是,返回true后,控制权又回到:else if block.Can任何人都可以告诉我我做错了什么?BST搜索方法不返回预期的结果

帮助将是非常appreciated.Thanks提前!

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

回答

1

您需要返回每次调用该方法的结果。目前,当控制进入else/ifelse块时,您将忽略从该方法返回的结果。

而且,你不需要布尔标志只使用条件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; 
} 
+0

什么错误!非常感谢 !! – Dev