题目
解析
本题和之前的那道判断两个二叉树是否相等基本一致(详情点击),但是多了一点的是,题目只给了一个传根结点的函数,我们需要引入另外一个包含两个参数的用于比较是否镜像对称的函数。
之前那道判断两个结点是否相等判断的是根结点是否相等以及叶子结点是否相等,镜像相似无非是判断根结点是否相等,以及左子结点和右子结点是否相等即可。
代码
public class Main {
public static void main(String[] args) {
TreeNode t1 = new TreeNode(1);
t1.left = new TreeNode(2);
t1.right = new TreeNode(2);
t1.left.left = new TreeNode(3);
t1.left.right = new TreeNode(4);
t1.right.left = new TreeNode(4);
t1.right.right = new TreeNode(3);
// TreeNode t2 = new TreeNode(1);
// t2.left = new TreeNode(2);
// t2.right = new TreeNode(2);
System.out.println(new Main().isSymmetric(t1));
}
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
return isSymmetric(root.left, root.right);
}
public boolean isSymmetric(TreeNode left, TreeNode right) {
if (left == null && right == null)
return true;
else if (left != null && right == null || left == null && right != null)
return false;
else
return left.val == right.val && isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
}
}