/**
*
* 思路 :对称二叉树是关于中间轴对称的
*
* 从根节点出发,判断根节点是不是对称的,假如根节点对称(左节点的值和右节点的值相等),
* 再判断左节点的左节点和右节点的右节点
* 左节点的右节点和右节点的左节点是不是对称的
*
* 本质是根据节点去找镜像点比较
*/
/** * * 思路 :对称二叉树是关于中间轴对称的 * * 从根节点出发,判断根节点是不是对称的,假如根节点对称(左节点的值和右节点的值相等), * 再判断左节点的左节点和右节点的右节点 * 左节点的右节点和右节点的左节点是不是对称的 * * 本质是 根据节点去找镜像点比较 */ public class TreeSymmetric { public static boolean isSymmetric(TreeNode root) { if (root == null) return true; return isMirror(root.left, root.right); } public static boolean isMirror(TreeNode left , TreeNode right) { if (left == null && right == null) return true; // 两个都是null if (left == null || right == null) return false; // 有一个是null return left.val == right.val && isMirror(left.left, right.right) && isMirror(left.right, right.left); //递归 } public static class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public static void main(String[] args) { TreeNode root = new TreeNode(20); root.left = new TreeNode(21); root.right = new TreeNode(21); root.left.left = new TreeNode(15); root.right.right = new TreeNode(15); root.left.right = null; root.right.left = null; System.out.println(isSymmetric(root)); } }