LeetCode_101.对称二叉树

给定一个二叉树,检查它是否是镜像对称的。

 

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

    1
   / \
  2   2
 / \ / \
3  4 4  3

 

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1
   / \
  2   2
   \   \
   3    3

 

进阶:

你可以运用递归和迭代两种方法解决这个问题吗?

C#代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left;
 *     public TreeNode right;
 *     public TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public bool IsSymmetric(TreeNode root) {
        return IsSymmetric(root,root); 
    }
    public bool IsSymmetric(TreeNode p,TreeNode q) {
         /*递归边界1:两树均为空时返回true。*/
        if(p == null && q == null) return true;

        /*递归边界2:两树中任一为空(完整判断:p == null && q != null || p != null && q == null,但由于递归边界1,可以简化如下)。*/
        if(p == null || q == null) return false;

        /*递归边界3:左右两树节点值不相等,必定不对称。*/
        if(p.val != q.val) return false;

        /*递归调用,判断左树的右子树与右树的左子树、左树的左子树与右树的右子树的对称性,任一条件不满足返回false。*/
        return IsSymmetric(p.right, q.left) && IsSymmetric(p.left, q.right);
    }
}
posted @ 2021-01-06 18:06  付旭洋  阅读(56)  评论(0编辑  收藏  举报