背景

本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了 三个简单、两个中等、一个困难 等级的题目,共计三十道题,利用三十天的时间完成这组刻意练习。

本次任务的知识点:树

是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由 n(n>0) 个有限节点组成的一个具有层次关系的集合。

把它叫做「树」是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

它具有以下的特点:

  • 每个节点都只有有限个子节点或无子节点;
  • 没有父节点的节点称为根节点;
  • 每一个非根节点有且只有一个父节点;
  • 除了根节点外,每个子节点可以分为多个不相交的子树;
  • 树里面没有环路。

题目

  • 题号:101
  • 难度:简单
  • https://leetcode-cn.com/problems/symmetric-tree/

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

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

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1/ \2   2\   \3    3

实现

第一种:采用递归的方法

  • 执行结果:通过
  • 执行用时:132 ms, 在所有 C# 提交中击败了 16.67% 的用户
  • 内存消耗:25.1 MB, 在所有 C# 提交中击败了 5.17% 的用户
/*** Definition for a binary tree node.* public class TreeNode {*     public int val;*     public TreeNode left;*     public TreeNode right;*     public TreeNode(int x) { val = x; }* }*///镜像对称的递归函数
public class Solution
{public bool IsSymmetric(TreeNode root){return IsMirror(root, root);}private bool IsMirror(TreeNode t1, TreeNode t2){if (t1 == null && t2 == null) return true;if (t1 == null || t2 == null) return false;return (t1.val == t2.val)&& IsMirror(t1.left, t2.right)&& IsMirror(t1.right, t2.left);}
}

Python 语言

  • 执行结果:通过
  • 执行用时:48 ms, 在所有 Python3 提交中击败了 30.95% 的用户
  • 内存消耗:13.7 MB, 在所有 Python3 提交中击败了 5.17% 的用户
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = Noneclass Solution:def isSymmetric(self, root: TreeNode) -> bool:return self.isMirror(root, root)def isMirror(self, t1: TreeNode, t2: TreeNode) -> bool:if t1 is None and t2 is None:return Trueif t1 is None or t2 is None:return Falsereturn t1.val == t2.val and self.isMirror(t1.left, t2.right) and self.isMirror(t1.right, t2.left)

第二种:采用队列的方法

思路:利用二叉树的层次遍历的方式来实现。

  • 执行结果:通过
  • 执行用时:112 ms, 在所有 C# 提交中击败了 70.93% 的用户
  • 内存消耗:24.9 MB, 在所有 C# 提交中击败了 5.17% 的用户
public class Solution
{public bool IsSymmetric(TreeNode root){if (root == null)return true;Queue<TreeNode> nodes = new Queue<TreeNode>();nodes.Enqueue(root.left);nodes.Enqueue(root.right);while (nodes.Count != 0){TreeNode node1 = nodes.Dequeue();TreeNode node2 = nodes.Dequeue();if (node1 == null && node2 == null)continue;if (node1 == null || node2 == null)return false;if (node1.val != node2.val)return false;nodes.Enqueue(node1.left);nodes.Enqueue(node2.right);nodes.Enqueue(node1.right);nodes.Enqueue(node2.left);}return true;}
}

往期活动

LSGO软件技术团队会定期开展提升编程技能的刻意练习活动,希望大家能够参与进来一起刻意练习,一起学习进步!

  • Python基础刻意练习活动即将开启,你参加吗?
  • Task01:变量、运算符与数据类型
  • Task02:条件与循环
  • Task03:列表与元组
  • Task04:字符串与序列
  • Task05:函数与Lambda表达式
  • Task06:字典与集合
  • Task07:文件与文件系统
  • Task08:异常处理
  • Task09:else 与 with 语句
  • Task10:类与对象
  • Task11:魔法方法
  • Task12:模块

我是 终身学习者“老马”,一个长期践行“结伴式学习”理念的 中年大叔

我崇尚分享,渴望成长,于2010年创立了“LSGO软件技术团队”,并加入了国内著名的开源组织“Datawhale”,也是“Dre@mtech”、“智能机器人研究中心”和“大数据与哲学社会科学实验室”的一员。

愿我们一起学习,一起进步,相互陪伴,共同成长。

后台回复「搜搜搜」,随机获取电子资源!
欢迎关注,请扫描二维码:

刻意练习:LeetCode实战 -- Task20. 对称二叉树相关推荐

  1. LeetCode实战:对称二叉树

    题目英文 Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). ...

  2. 20190915:(leetcode习题)对称二叉树

    对称二叉树 题目 大致思路 代码实现 题目 大致思路 判断依据很简单:①根节点相同,②③根节点的左(右)子树的值和根节点的右(左)子树的值相同即可,然后递归调用即可. 写的时候注意root为null的 ...

  3. [Leetcode总结] 101.对称二叉树

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

  4. leetcode系列-101.对称二叉树

    题目描述: 给你一个二叉树的根节点 root , 检查它是否轴对称. 示例 1: 输入:root = [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root = [1,2,2,nul ...

  5. LeetCode实战:二叉树的最近公共祖先

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a bin ...

  6. LeetCode实战:二叉树中的最大路径和

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a non ...

  7. LeetCode实战:二叉树的最大深度

    题目英文 Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the ...

  8. LeetCode实战:排序链表

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Sort a link ...

  9. LeetCode实战:除自身以外数组的乘积

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given an ar ...

最新文章

  1. 防止SQL注入式攻击
  2. C语言判断一个数是否是回文数
  3. android开机启动代码
  4. LeetCode 36有效的数独37解数独(八皇后问题)
  5. VISTA中释放系统还原占用的硬盘空间
  6. 把东西从学校搬回来了
  7. RDL(C) Report Design Step by Step 1: DrillThrough Report
  8. 真实的产品案例:实现文档边缘检测
  9. python全景图像拼接_超详讲解图像拼接/全景图原理和应用 | 附源码
  10. “百度有啊”可以访问了,大家预测一把其前景如何?
  11. 在Excel中输入身份证号码的方法或批量改为文本格式
  12. 自动驾驶技术越来越火,浅谈一些对百度Apollo开放平台8.0的看法和认知
  13. BeautifulSoup总结及contents内容分析
  14. 用户特殊权限SUID,SGID, SBIT理解学习
  15. 5年Java面试阿里P6经验总结
  16. GPS接收机-从射频信号到定位解算
  17. 物联网平台搭建教程01
  18. JAVA应该怎么学?
  19. 手机搜狐概念版 html,搜狐领跑四大门户 首推H5技术手机概念版
  20. SDWAN:SD了什么?

热门文章

  1. Docker的使用(三:Docker Hub远程镜像管理)
  2. JavaScript面向对象怎样删除标签页?
  3. 21年最新Python面试题及答案汇总详解(上)
  4. 工作中感受到的消息中间件在分布式系统中的使用场景
  5. 微信小程序server-1-搭建HTTPS server
  6. InstallShield 2015 LimitedEdition VS2012 运行bat文件
  7. Num55 boss09(activiti安装以及API)
  8. 老生常谈,joomla wordpress drupal,你该选择哪个CMS?
  9. CommonJS 的 AMD 规范
  10. mysql 开启慢查询命令【转】