Python对称的二叉树多种思路实现方法


Posted in Python onFebruary 28, 2020

对称二叉树的含义非常容易理解,左右子树关于根节点对称,具体来讲,对于一颗对称二叉树的每一颗子树,以穿过根节点的直线为对称轴,左边子树的左节点=右边子树的右节点,左边子树的右节点=左边子树的左节点。所以对称二叉树的定义是针对一棵树,而判断的操作是针对节点,这时可以采取由上到下的顺序,从根节点依次向下判断,只需要重复调用函数,不需要回溯。

题目:对称的二叉树题:

请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的

解题思路一:先遍历右子节点再遍历左子节点。注意,我们必须把遍历二叉树时遇到的空指针考虑进来。

class Solution:
  def isSymmetrical(self, pRoot):
    # write code here
    return self.isSymmetricalCore(pRoot,pRoot)
  
  def isSymmetricalCore(self,pRoot1,pRoot2):
    if not pRoot1 and not pRoot2:
      return True
    if not pRoot1 or not pRoot2:
      return False
    if pRoot1.val != pRoot2.val:
      return False
    return self.isSymmetricalCore(pRoot1.left,pRoot2.right) and self.isSymmetricalCore(pRoot1.right,pRoot2.left)

解题思路二:迭代

def isSymmetric(self, root: 'TreeNode') -> 'bool':
  stack = root and [(root.left, root.right)]    
  while stack:
    p1, p2 = stack.pop()
    if not p1 and not p2: continue
    if not p1 or not p2: return False
    if p1.val != p2.val: return False
    stack.append((p1.left, p2.right))
    stack.append((p1.right, p2.left))
  return True

到此这篇关于Python对称的二叉树多种思路实现方法的文章就介绍到这了,更多相关Python对称的二叉树内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python杀死一个线程的方法
Sep 06 Python
初步剖析C语言编程中的结构体
Jan 16 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 Python
Python使用内置json模块解析json格式数据的方法
Jul 20 Python
Python基于正则表达式实现文件内容替换的方法
Aug 30 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
Nov 24 Python
Python日志无延迟实时写入的示例
Jul 11 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
解决tensorflow训练时内存持续增加并占满的问题
Jan 19 Python
在python3中使用shuffle函数要注意的地方
Feb 28 Python
Python实现从N个数中找到最大的K个数
Apr 02 Python
如何在Windows中安装多个python解释器
Jun 16 Python
pycharm如何实现跨目录调用文件
Feb 28 #Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
Feb 28 #Python
python 爬虫 实现增量去重和定时爬取实例
Feb 28 #Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
Feb 28 #Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
Feb 27 #Python
Python递归求出列表(包括列表中的子列表)的最大值实例
Feb 27 #Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
Feb 27 #Python
You might like
php实现单笔转账到支付宝功能
2018/10/09 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
永不消失的title提示代码
2007/02/15 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
node.js实现的装饰者模式示例
2017/09/06 Javascript
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
js实现扫雷源代码
2020/11/27 Javascript
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python 面向对象 成员的访问约束
2008/12/23 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
2018/12/24 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
python用Configobj模块读取配置文件
2020/09/26 Python
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
中国央视网签名寄语
2014/01/18 职场文书
扬尘污染防治方案
2014/06/15 职场文书
数学教育专业求职信
2014/07/22 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
质监局领导班子践行群众路线整改方案
2014/10/26 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
使用Redis实现秒杀功能的简单方法
2021/05/08 Redis
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS
十大冰系宝可梦排名,颜值最高的阿罗拉九尾,第三使用率第一
2022/03/18 日漫