2017-05-07 1 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

관련 문제