/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
    public TreeNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    boolean isSymmetrical(TreeNode pRoot) {
        if(pRoot == null){  //特殊值判断,如果是空二叉树,则是对称二叉树,返回true
            return true;
        }
        return isSymmetrical2Tree(pRoot,pRoot);
    }
    //该函数用于判断两棵二叉树是否是对称二叉树
    public static boolean isSymmetrical2Tree(TreeNode root1,TreeNode root2){
        //。情况1:如果两棵二叉树都为空,则是对称二叉树
        if(root1 == null && root2 == null){
            return true;
        }
        //。情况2:如果两棵二叉树中有一棵是空二叉树,则不是对称二叉树
        if(root1 == null || root2 == null){
            return false;
        }
        //。情况3:如果两棵二叉树都不为空,则还要进行下一步判断,如果根节点的值不相等,则不是对称二叉树
        if(root1.val != root2.val){
            return false;
        }
        //递归两棵二叉树的子节点
        return isSymmetrical2Tree(root1.left,root2.right) && isSymmetrical2Tree(root1.right,root2.left);
    }
}