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

题目分析

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

    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. IDEA类和方法注释自动生成

      一.生成类注释 1.打开Preferences-->Editor-->File and Code Templates,右侧选择Filestab页,找到Class.Interface,可以看 ...

    2. tensorflow按需分配GPU问题

      使用tensorflow,如果不加设置,即使是很小的模型也会占用整块GPU,造成资源浪费. 所以我们需要设置,使程序按需使用GPU. 具体设置方法: gpu_options = tf.GPUOptio ...

    3. JSP技术(一)

      Servlet的两个缺点: 1.首先,写在Servlet中所有的HTML标签必须包含JAVA字符串,使得处理HTTP响应报文工作十分繁琐. 2.所有的文件和HTML标记是硬代码,导致即使是微小变化,也 ...

    4. Go类型断言

      package main import ( "fmt" ) type Point struct { x int y int } func main() { var a interf ...

    5. iframe onload事件触发两次

      标准参考 关于 HTML 4.01 规范中 onload 内在事件说明:http://www.w3.org/TR/html401/interact/scripts.html#adef-onload 关 ...

    6. https://www.cnblogs.com/chanshuyi/p/alibaba_review_3_level.html

      https://www.cnblogs.com/chanshuyi/p/alibaba_review_3_level.html http://www.cnblogs.com/skywang12345/ ...

    7. WCF全面解析之 第四讲 使用代码 部署服务

      关键代码: ServiceHost host = null; //启动 private void button1_Click(object sender, EventArgs e) { host=ne ...

    8. Java常用API——Arrays工具类

      介绍:Arrays工具类提供了一些可以直接操作数组的方法,以下是一些常用方法: int binarySearch(type[] a, type key):要求数组a元素升序排列,使用二分法搜索key的 ...

    9. Springboot学习:SpringMVC自动配置

      Spring MVC auto-configuration Spring Boot 自动配置好了SpringMVC 以下是SpringBoot对SpringMVC的默认配置:==(WebMvcAuto ...

    10. 三 模拟实现顺序表ArrayList

      /** * 顺序表,重点是数组动态扩容,插入 * 底层采用数组,长度可以动态变化,此处采用增长一倍 *  java.util.ArrayList每次增长50% *  int newCapacity = ...