题目描述:给定一个二叉树,检查它是否是镜像对称的。

题目分析

下面这种二叉树就是镜像对称的,符合题目要求:

  1. 1
  2. / \
  3. 2 2
  4. / \ / \
  5. 3 4 4 3

解法 1:递归检查

根据题目“对称”的定义,递归过程如下:

  • 对称节点的 val 是否相同
  • 依次递归对称节点的 left1 和 right2、right1 和 left2(结合上面的例子更好理解)

代码实现如下:

  1. // ac地址:https://leetcode-cn.com/problems/symmetric-tree/
  2. // 原文地址:https://xxoo521.com/2020-02-16-symmetric-tree/
  3. /**
  4. * @param {TreeNode} root
  5. * @return {boolean}
  6. */
  7. var isSymmetric = function(root) {
  8. if (!root) return true;
  9. return __isSymmetric(root.left, root.right);
  10. };
  11. function __isSymmetric(t1, t2) {
  12. if (!t1 && !t2) return true;
  13. if (!t1 || !t2) return false;
  14. return (
  15. t1.val === t2.val &&
  16. __isSymmetric(t1.left, t2.right) &&
  17. __isSymmetric(t1.right, t2.left)
  18. );
  19. }

时间复杂度是 O(N),空间复杂度是 O(N)。因为最坏情况下,树是线性的。

更多资料