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); } }
这道题目考察的是判断二叉树是否镜像对称,以及递归的思想。
以下是代码解释的大纲:
- 创建一个类Solution,包含一个方法isSymmetric,用于判断二叉树是否镜像对称。
- isSymmetric方法接收一个参数root,表示二叉树的根节点。返回一个布尔值,表示二叉树是否镜像对称。
- 在isSymmetric方法中,首先判断根节点是否为空,如果为空,则直接返回true。
- 调用递归函数isMirror,传入根节点的左子树和右子树,并返回结果。
- 定义递归函数isMirror,用于判断两棵树是否镜像对称。该函数接收两个参数node1和node2,分别表示两棵树的当前节点。
- 在isMirror函数中,首先判断当前节点是否都为空,如果是,则返回true。
- 如果其中一个节点为空,或者两个节点的值不相等,则返回false。
- 递归调用isMirror函数,分别传入node1的左子树和node2的右子树,并传入node1的右子树和node2的左子树。只有两次递归都返回true,才说明两棵子树镜像对称。
- 返回两次递归的结果的逻辑与运算。
通过这道题目的解答,可以巩固二叉树的遍历和递归思想,并学会判断二叉树是否镜像对称。