如何在 C# 中使用递归检查树是否对称?

csharpserver side programmingprogramming更新于 2025/4/18 6:37:17

在递归方法中,为了确定树是否对称,我们首先检查树是否为空,如果树为空则为对称,如果树不为空,则我们调用方法 issymmetricmirror。在 isSymmetricMirror 中,我们获取左子节点和右子节点的值,如果左子节点和右子节点均为空,则我们认为是对称的,如果其中一个值为空,则我们认为是不对称的,最后我们通过传递左子节点和右子节点的值来递归调用 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

相关文章