对称二叉树,判断这个树是否是对称的, 就是判断它的左右节点是否相等,如果相等的话,就继续递归,判断它左节点的左节点和右节点的右节点及左节点的右节点和右节点的左节点是否相等。
这样递归判断下去就能够分辨出整棵树是不是镜像对称的。
这是整个递归的过程,就是将任务不断的往下分解,判断他们的子节点是否是对称的,每一对子节点的对称结果决定了父节点的对称性。
看下代码,重点看下递归结束的条件是怎么样写的:
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; if(left == null || right == null) return false; if(left.val != right.val) return false; return isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left); }