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

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

<시간/>

반복적 접근에서 우리는 2개의 큐를 생성해야 합니다. 하나의 큐는 왼쪽 자식을 저장하고 다른 큐는 오른쪽 자식 값을 저장합니다. 트리가 비어 있으면 루트 노드를 통과하는 수직 축에 대칭입니다. 그렇지 않으면 두 하위 트리의 루트 노드 값이 동일한지 확인합니다. 그렇다면 왼쪽 하위 트리와 오른쪽 하위 트리가 대칭인지 확인하십시오. 왼쪽 자식 값과 오른쪽 자식 값을 queue1에 넣고 오른쪽 자식과 왼쪽 자식 값을 queue1에 넣습니다.

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 isSymmetricIterative(Node node){
      if (node == null){
         return true;
      }
      Queue<Node> Q1 = new Queue<Node>);
      Queue<Node> Q2 = new Queue<Node>();
      Q1.Enqueue(node.LeftChild);
      Q2.Enqueue(node.RightChild);
      while (Q1.Count > 0 && Q2.Count > 0){
         Node n1 = Q1.Dequeue();
         Node n2 = Q2.Dequeue();
         if ((n1 == null && n2 != null) || n1 != null && n2 == null){
            return false;
         }
         if (n1 != null){
            if (n1.Value != n2.Value){
               return false;
            }
            Q1.Enqueue(n1.LeftChild);
            Q1.Enqueue(n1.RightChild);
            Q1.Enqueue(n1.RightChild);
            Q1.Enqueue(n1.LeftChild);
         }
      }
      return true;
   }
}

출력

      1
     2 2
   3 4 4 3
True