import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @return bool布尔型
     */
    public boolean isSymmetric (TreeNode root) {
        // write code here
        if (root == null) {
            return true;
        }
        return isMirror(root.left, root.right);
    }

    public boolean isMirror(TreeNode node1, TreeNode node2) {
        if (node1 == null && node2 == null) {
            return true;
        }
        if (node1 == null || node2 == null) {
            return false;
        }

        return node1.val == node2.val && isMirror(node1.left, node2.right) &&
               isMirror(node1.right, node2.left);
    }
}

这道题目考察的是判断二叉树是否镜像对称,以及递归的思想。

以下是代码解释的大纲:

  1. 创建一个类Solution,包含一个方法isSymmetric,用于判断二叉树是否镜像对称。
  2. isSymmetric方法接收一个参数root,表示二叉树的根节点。返回一个布尔值,表示二叉树是否镜像对称。
  3. 在isSymmetric方法中,首先判断根节点是否为空,如果为空,则直接返回true。
  4. 调用递归函数isMirror,传入根节点的左子树和右子树,并返回结果。
  5. 定义递归函数isMirror,用于判断两棵树是否镜像对称。该函数接收两个参数node1和node2,分别表示两棵树的当前节点。
  6. 在isMirror函数中,首先判断当前节点是否都为空,如果是,则返回true。
  7. 如果其中一个节点为空,或者两个节点的值不相等,则返回false。
  8. 递归调用isMirror函数,分别传入node1的左子树和node2的右子树,并传入node1的右子树和node2的左子树。只有两次递归都返回true,才说明两棵子树镜像对称。
  9. 返回两次递归的结果的逻辑与运算。

通过这道题目的解答,可以巩固二叉树的遍历和递归思想,并学会判断二叉树是否镜像对称。