Computer >> 컴퓨터 >  >> 프로그램 작성 >> C#

C#에서 재귀를 사용하여 이진 트리가 유효한 이진 검색 트리인지 확인하는 방법은 무엇입니까?

<시간/>

트리는 노드 요소보다 작은 왼쪽 자식과 노드 요소보다 큰 오른쪽 자식이 모두 있는 경우 이진 검색 트리입니다. 처음에 노드에 값이 있는지 확인하고 노드가 null이면 유효한 이진 검색 트리로 간주하고 true를 반환합니다. 노드 null 결과를 확인한 후 노드, 최소값 및 최대값을 전달하여 재귀 메서드 isValidBST를 호출합니다. 루트 값이 최소값보다 작고 루트 값이 최대값보다 크면 이진 탐색 트리가 아닌 것으로 간주하고 false를 반환합니다. 그렇지 않으면 모든 노드를 확인할 때까지 왼쪽 및 오른쪽 값을 전달하여 isValidBST 메서드를 재귀적으로 호출합니다.

예시

public class TreesPgm{
   public class Node{
      public int Value;
      public Node LeftChild;
      public Node RightChild;
      public Node(int value){
         this.Value = value;
      }
      public override String ToString(){
         return "Node=" + Value;
      }
   }
   public bool isValidBST(Node root){
      if (root == null){
         return true;
      }
      return isValidBST(root, int.MinValue, int.MaxValue);
   }
   private bool isValidBST(Node root, int min, int max){
      if (root == null){
         return true;
      }
      if (root.Value <= min || root.Value >= max){
         return false;
      }
      return isValidBST(root.LeftChild, min, root.Value) && isValidBST(root.RightChild,
      root.Value, max);
   }
}

입력

   5
  2 6
1  3

출력

True