剑指 Offer 28. 对称的二叉树

image.png

递归

  1. public class Solution {
  2. public boolean isSymmetric(TreeNode root) {
  3. // 如果根节点为空,返回 true,递归判断左子树与右子树是否对称
  4. return root == null || recursion(root.left, root.right);
  5. }
  6. private boolean recursion(TreeNode left, TreeNode right) {
  7. // 如果左右都为空,说明已经到达叶子节点
  8. if (left == null && right == null) return true;
  9. // 如果左右其中一个为空或左右值不一致,说明不对称
  10. if (left == null || right == null || left.val != right.val) return false;
  11. // 递归判断 left 的左节点是否等于 right 的右节点 && left 的 右节点是否等于 right 的左节点
  12. return recursion(left.left, right.right) && recursion(left.right, right.left);
  13. }
  14. }