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);
}
}