package class06;
/**
 * 判断是否是镜面树(对称树)
 */
//测试链接:https://leetcode.com/problems/symmetric-tree
public class Code03_MirrorTree {
    public static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        public TreeNode(int val) {
            this.val = val;
        }
    }
    public static boolean isSymmetric(TreeNode root) {
        return isMirrorTree(root, root);//可以理解为,根节点和根节点本身是对称的。
    }
    public static boolean isMirrorTree(TreeNode head1, TreeNode head2) {
        if (head1 == null ^ head2 == null) {//如果一个为空,一个不为空,则返回false。
            return false;
        }
        if (head1 == null) {//空树和空树是对称的。
            return true;
        }
        //如果头节点的值相等。并且head1的左子节点和head2的右子节点相等。并且head1的右子节点和head2的左子节点相等。那么总体返回true。
        //否则返回false。
        return head1.val == head2.val && isMirrorTree(head1.left, head2.right) && isMirrorTree(head1.right, head2.left);
    }
}