一、题目概述
二、思路方向
在Java中,要检查一个二叉树是否是轴对称的(也称为镜像对称的),你可以通过递归地比较树的左子树和右子树是否镜像对称来实现。轴对称的二叉树意味着树的左子树和右子树关于根节点对称,即左子树的每个节点都与右子树中相应位置的节点镜像对称。
三、代码实现
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public class Solution {
public boolean isSymmetric(TreeNode root) {
// 如果根节点为空,则认为是对称的(空树是对称的)
if (root == null) {
return true;
}
// 调用辅助函数来比较左右子树
return isMirror(root.left, root.right);
}
// 辅助函数,用于递归地比较两个树是否镜像对称
private boolean isMirror(TreeNode t1, TreeNode t2) {
// 如果两个节点都为空,则它们是对称的
if (t1 == null && t2 == null) {
return true;
}
// 如果只有一个节点为空,或者节点的值不相等,则它们不是对称的
if (t1 == null || t2 == null || t1.val != t2.val) {
return false;
}
// 递归地比较左子树的左子树和右子树的右子树,以及左子树的右子树和右子树的左子树
return isMirror(t1.left, t2.right) && isMirror(t1.right, t2.left);
}
public static void main(String[] args) {
// 示例用法
// 构建一个简单的轴对称二叉树进行测试
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(2);
root.left.left = new TreeNode(3);
root.right.right = new TreeNode(3);
Solution solution = new Solution();
boolean isSymmetric = solution.isSymmetric(root);
System.out.println("Is symmetric? " + isSymmetric); // 应输出 true
}
}
执行结果:
四、小结
在上面的代码中,
isSymmetric
方法首先检查根节点是否为空(空树是对称的)。然后,它调用辅助函数isMirror
来递归地比较左子树和右子树是否镜像对称。isMirror
函数首先检查两个节点是否都为空(这是递归的基本情况),然后检查它们是否都非空且值相等。最后,它递归地比较左子树的左子树与右子树的右子树,以及左子树的右子树与右子树的左子树,从而确定两棵树是否镜像对称。
结语
你相信你行,你就活力无穷
你认为你自已不行,就会精神萎靡
!!!