2017-05-07 18 views
0

検索対象の値がツリー内に存在するかどうかを示すブール値を返すBST検索メソッドについては、このコードでは何が間違っていますか?しかし、trueに戻った後、制御は再び:else if block.Can誰かが私が間違っていることを教えてもらえますか?BST検索メソッドが期待した結果を返さない

ヘルプは高く評価されます。事前に感謝します!

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/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; 
} 
+0

どのような間違い!!!どうもありがとう !! – Dev

関連する問題