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代码检查工具pylint 让你的python更规范
Sep 05 Python
python使用urllib2模块获取gravatar头像实例
Dec 18 Python
Flask框架信号用法实例分析
Jul 24 Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
Aug 12 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
Python实现栈和队列的简单操作方法示例
Nov 29 Python
pytorch实现从本地加载 .pth 格式模型
Feb 14 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
Feb 18 Python
SpringBoot实现登录注册常见问题解决方案
Mar 04 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
Jun 05 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
239军机修复记
2021/03/02 无线电
分页详解 从此分页无忧(PHP+mysql)
2007/11/23 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
php连接Access数据库错误及解决方法
2013/06/20 PHP
php微信公众号开发之关键词回复
2018/10/20 PHP
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
angular.bind使用心得
2015/10/26 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
JQuery EasyUI的使用
2016/02/24 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
python之wxPython应用实例
2014/09/28 Python
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
Python中使用pprint函数进行格式化输出的教程
2015/04/07 Python
python中安装模块包版本冲突问题的解决
2017/05/02 Python
Django的HttpRequest和HttpResponse对象详解
2018/01/26 Python
Python输入二维数组方法
2018/04/13 Python
python调用动态链接库的基本过程详解
2019/06/19 Python
Python缓存技术实现过程详解
2019/09/25 Python
办公室主任竞聘演讲稿
2014/05/15 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
2015年高考寄语或鼓励的话
2015/03/23 职场文书
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android