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

C #에서 재귀를 사용하여 트리가 대칭인지 여부를 확인하는 방법은 무엇입니까?

<시간/>

재귀적 접근 방식에서 우리는 트리가 대칭인지 여부를 찾기 위해 처음에 트리가 null인지 여부를 확인합니다. 트리가 null이면 대칭이고 트리가 null이 아니면 issymmetricmirror 메서드를 호출합니다. isSymmetricMirror에서 우리는 다음을 얻습니다. 왼쪽 자식과 오른쪽 자식의 값, 왼쪽과 오른쪽 자식이 모두 null이면 대칭으로 간주하고 값 중 하나가 null이면 대칭이 아닌 것으로 간주하고 마침내 왼쪽과 오른쪽을 전달하여 issymmetric 메서드를 재귀적으로 호출합니다. 자식 가치.

예시

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 isSymmetricRecursive(Node node)
   {
      if (node == null){
         return true;
      }
      return isSymmetricMirror(node.LeftChild, node.RightChild);
   }
   private bool isSymmetricMirror(Node node1, Node node2){
      if (node1 == null && node2 == null){
         return true;
      }
      if (node1 == null || node2 == null){
         return false;
      }
      if (node1.Value != node2.Value){
         return false;
      }
      return isSymmetricMirror(node1.LeftChild, node2.RightChild) && isSymmetricMirror(node2.LeftChild, node1.RightChild);
   }
}

출력

      1
    2  2
   3 4 4 3
True