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