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中针对函数处理的特殊方法
Mar 06 Python
Python从MP3文件获取id3的方法
Jun 15 Python
利用numpy+matplotlib绘图的基本操作教程
May 03 Python
谈谈Python中的while循环语句
Mar 10 Python
pandas基于时间序列的固定时间间隔求均值的方法
Jul 04 Python
Win10 安装PyCharm2019.1.1(图文教程)
Sep 29 Python
Pytorch中的variable, tensor与numpy相互转化的方法
Oct 10 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
Python 实现黑客帝国中的字符雨的示例代码
Feb 20 Python
python+opencv边缘提取与各函数参数解析
Mar 09 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
Apr 03 Python
如何在scrapy中捕获并处理各种异常
Sep 28 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中实现图片的锐化
2006/10/09 PHP
PHP脚本的10个技巧(5)
2006/10/09 PHP
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
PHP flush()与ob_flush()的区别详解
2013/06/03 PHP
php创建session的方法实例详解
2015/01/27 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
PHP中危险的file_put_contents函数详解
2017/11/04 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
JavaScript中各种编码解码函数的区别和注意事项
2010/08/19 Javascript
javascript innerHTML使用分析
2010/12/03 Javascript
菜鸟javascript基础资料整理3 正则
2010/12/06 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
2015/11/23 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
Backbone中View之间传值的学习心得
2016/08/09 Javascript
nodejs连接mongodb数据库实现增删改查
2016/12/01 NodeJs
深入理解javascript中concat方法
2016/12/12 Javascript
es6学习笔记之Async函数的使用示例
2017/05/11 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
Python struct.unpack
2008/09/06 Python
python 中的列表解析和生成表达式
2011/03/10 Python
Python Sleep休眠函数使用简单实例
2015/02/02 Python
浅析Python面向对象编程
2020/07/10 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
介绍一下linux文件系统分配策略
2012/11/17 面试题
三年级科学教学反思
2014/01/29 职场文书
简历自我评价模版
2014/01/31 职场文书
社区清明节活动总结
2014/07/04 职场文书
就业协议书
2014/09/12 职场文书
2014年少先队工作总结
2014/12/03 职场文书
搬迁通知
2015/04/20 职场文书
清明节主题班会
2015/08/14 职场文书
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python