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

题目分析

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

    1
/ \
2 2
/ \ / \
3 4 4 3

解法 1:递归检查

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

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

代码实现如下:

// ac地址:https://leetcode-cn.com/problems/symmetric-tree/
// 原文地址:https://xxoo521.com/2020-02-16-symmetric-tree/ /**
* @param {TreeNode} root
* @return {boolean}
*/
var isSymmetric = function(root) {
if (!root) return true; return __isSymmetric(root.left, root.right);
}; function __isSymmetric(t1, t2) {
if (!t1 && !t2) return true;
if (!t1 || !t2) return false; return (
t1.val === t2.val &&
__isSymmetric(t1.left, t2.right) &&
__isSymmetric(t1.right, t2.left)
);
}

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

更多资料

  • LeetCode 101.对称二叉树 - JavaScript的更多相关文章

    1. Java实现 LeetCode 101 对称二叉树

      101. 对称二叉树 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2 ...

    2. LeetCode 101 对称二叉树的几种思路(Python实现)

      对称二叉树 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的.   1   / \ 2   2 / \ / \3 4 4 3 但是下面这个 [1,2,2 ...

    3. LeetCode 101. 对称二叉树(Symmetric Tree)

      题目描述 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null, ...

    4. LeetCode【101. 对称二叉树】

      对称二叉树,就是左节点的左节点等于右节点的右节点,左节点的右节点等于右节点的左节点. 很自然就想到迭代与递归,可以创建一个新的函数,就是另一个函数不断的判断,返回在主函数. class Solutio ...

    5. Leetcode题目101.对称二叉树(简单)

      题目描述: 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null ...

    6. 【LeetCode】101. 对称二叉树

      题目 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3, ...

    7. 领扣(LeetCode)对称二叉树 个人题解

      给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,nul ...

    8. LeetCode 297.序列化二叉树 - JavaScript

      题目描述 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据. 请设计一个算法 ...

    9. 【Leetcode】对称二叉树

      递归法 执行用时 :12 ms, 在所有 C++ 提交中击败了43.44%的用户 内存消耗 :14.6 MB, 在所有 C++ 提交中击败了95.56%的用户 /** * Definition for ...

    随机推荐

    1. Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException

      实体类缺少无参构造方法,序列化对象需要无参构造方法 @NoArgsConstructor

    2. js 根据data-i 降序排列

      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

    3. Clausen Functions (and related series, functions, integrals)

      Since the Clausen functions are intimately related to a number of other important special functions, ...

    4. Python学习(二)——Python基础

      基础 1.文件后缀名: 后缀名必须是.py,否则导入模块时会出错 2.执行方式: python解释器 .py文件路径 python 进入解释器 实时输入并获取执行结果 3.解释器路径 #!/usr/b ...

    5. JavaScript学习笔记之二

      一 js与json数据格式的转换:序列号与反序列化 JSON.stringify(jsobj, '  ');//将js的obj转换为json对象: JSON.parse()把json对象变成一个Jav ...

    6. linux中利用fstab实现磁盘分区自动挂载

      如何格式化磁盘.给磁盘分区以及挂载,参考我的另一篇博客: https://www.cnblogs.com/mediocreWorld/p/11123786.html 博客中有一个格式化分区的命令: m ...

    7. min-25筛总结

      怕忘了赶快更一下.就是求积性函数前缀和的. 没有 \(\LaTeX\) 原理 现在你有一个积性函数 f(1)=1 FP(p) FPK(p,k) 首先要求的是前缀和,那就是f(质数)+f(合数)+f(1 ...

    8. php概率

      /*  * 经典的概率算法,  * $proArr是一个预先设置的数组,  * 假设数组为:array(100,200,300,400),  * 开始是从1,1000 这个概率范围内筛选第一个数是否在 ...

    9. 在HTML中实现两个div并排显示

      在HTML中让两个div并排显示,通常情况下有三种实现方式,包括: (1)设置为行内样式,display:inline-block (2)设置float浮动 (3)设置position定位属性为abs ...

    10. ORM框架的概述

      ORM: object relation mapping [对象][关系]映射    将对象  映射到  数据库中        类名        数据库表名        对象           ...