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实现读取目录所有文件的文件名并保存到txt文件代码
Nov 22 Python
Python的Twisted框架上手前所必须了解的异步编程思想
May 25 Python
Swift 3.0在集合类数据结构上的一些新变化总结
Jul 11 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
Python OpenCV 直方图的计算与显示的方法示例
Feb 08 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
Jul 27 Python
django_orm查询性能优化方法
Aug 20 Python
Django csrf 验证问题的实现
Oct 09 Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
Apr 13 Python
python批量修改交换机密码的示例
Sep 22 Python
Python下载的11种姿势(小结)
Nov 18 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递归删除目录几个代码实例
2014/04/21 PHP
实例讲解php实现多线程
2019/01/27 PHP
php源码的使用方法讲解
2019/09/26 PHP
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
web基于浏览器的本地存储方法应用
2012/11/27 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
2017/02/24 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
Babel 入门教程学习笔记
2018/06/13 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
Django跨域请求CSRF的方法示例
2018/11/11 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
2020/03/06 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
工商治理实习生的自我评价
2014/01/15 职场文书
三下乡活动方案
2014/01/31 职场文书
销售人员自我评价
2014/02/01 职场文书
开学典礼感言
2014/02/16 职场文书
文明寝室标语
2014/06/13 职场文书
大学生个人简历自我评价
2015/03/11 职场文书
工程资料员岗位职责
2015/04/13 职场文书
2015年科研工作总结范文
2015/05/13 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
整理Python中常用的conda命令操作
2021/06/15 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python