Python二叉树的镜像转换实现方法示例


Posted in Python onMarch 06, 2019

本文实例讲述了Python二叉树的镜像转换实现方法。分享给大家供大家参考,具体如下:

问题描述

操作给定的二叉树,将其变换为源二叉树的镜像。

Python二叉树的镜像转换实现方法示例

思路描述

1. 代码比文字更直观

2. 文字描述:新建一个二叉树,利用递归法,将源二叉树上的左节点赋值到新二叉树的右节点,将源二叉树上的右节点赋值到新二叉树的左节点。

Python代码

# 方式1:生成新的镜像二叉树
def getMirrorBST(self, root):
  if root == None:
    return
  newTree = treeNode(root.val)
  newTree.right = self.getMirrorBST(root.left)
  newTree.left = self.getMirrorBST(root.right)
  return newTree

但是提交代码后,说通过率为0… 原来要求将原有的二叉树就地改成镜像二叉树…如此一来,代码就更简单了:因为交换根节点的左右子节点时,以左右子节点为根节点的左子树和右子树也会交换位置。最终的Python代码如下:

# 方式2:改变给定的二叉树为镜像二叉树
def turnToMirror(self, root):
  if root == None:
    return
  root.right, root.left = root.left, root.right
  self.turnToMirror(root.left)
  self.turnToMirror(root.right)
  return root

包含测试代码的最终代码如下:

class Solution:
  # 给定一个二叉树,获得其镜像(轴对称)的镜像二叉树:
  # 方式1:生成新的镜像二叉树
  def getMirrorBST(self, root):
    if root == None:
      return
    newTree = treeNode(root.val)
    newTree.right = self.getMirrorBST(root.left)
    newTree.left = self.getMirrorBST(root.right)
    return newTree
  # 方式2:改变给定的二叉树为镜像二叉树
  def turnToMirror(self, root):
    if root == None:
      return
    root.right, root.left = root.left, root.right
    self.turnToMirror(root.left)
    self.turnToMirror(root.right)
    return root
  # 给定二叉树的前序遍历和中序遍历,获得该二叉树
  def getBSTwithPreTin(self, pre, tin):
    if len(pre)==0 | len(tin)==0:
      return None
    root = treeNode(pre[0])
    for order,item in enumerate(tin):
      if root .val == item:
        root.left = self.getBSTwithPreTin(pre[1:order+1], tin[:order])
        root.right = self.getBSTwithPreTin(pre[order+1:], tin[order+1:])
        return root
class treeNode:
  def __init__(self, x):
    self.left = None
    self.right = None
    self.val = x
if __name__ == '__main__':
  flag = "turnToMirror"
  solution = Solution()
  preorder_seq = [1, 2, 4, 7, 3, 5, 6, 8]
  middleorder_seq = [4, 7, 2, 1, 5, 3, 8, 6]
  treeRoot1 = solution.getBSTwithPreTin(preorder_seq, middleorder_seq)
  if flag == "mirrorBST":
    newRoot = solution.getMirrorBST(treeRoot1)
    print(newRoot)
  if flag == "turnToMirror":
    solution.turnToMirror(treeRoot1)
    print(treeRoot1)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中的hypot()方法使用简介
May 18 Python
Python编程之string相关操作实例详解
Jul 22 Python
Python 装饰器使用详解
Jul 29 Python
Python实现matplotlib显示中文的方法详解
Feb 06 Python
python统计中文字符数量的两种方法
Jan 31 Python
基于PyQt4和PySide实现输入对话框效果
Feb 27 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
Mar 05 Python
详解python编译器和解释器的区别
Jun 24 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 Python
Python如何批量生成和调用变量
Nov 21 Python
Jupyter Notebook 远程访问配置详解
Jan 11 Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 Python
Python实现二叉树的常见遍历操作总结【7种方法】
Mar 06 #Python
Python中一般处理中文的几种方法
Mar 06 #Python
Python学习笔记之视频人脸检测识别实例教程
Mar 06 #Python
Python学习笔记之图片人脸检测识别实例教程
Mar 06 #Python
详解django2中关于时间处理策略
Mar 06 #Python
Django使用AJAX调用自己写的API接口的方法
Mar 06 #Python
Django+Xadmin构建项目的方法步骤
Mar 06 #Python
You might like
十天学会php之第一天
2006/10/09 PHP
PHP开发文件系统实例讲解
2006/10/09 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
thinkPHP5.0框架环境变量配置方法
2017/03/17 PHP
PHP数据库操作三:redis用法分析
2017/08/16 PHP
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
jquery 问答知识整理
2010/02/11 Javascript
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
2017/12/26 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
thinkjs微信中控之微信鉴权登陆的实现代码
2019/08/08 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
在python中用url_for构造URL的方法
2019/07/25 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
美国综合购物商城:UnbeatableSale.com
2018/11/28 全球购物
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
创业计划书——互联网商机
2014/01/12 职场文书
中国入世承诺
2014/04/01 职场文书
企业公益活动策划方案
2014/08/24 职场文书
工作粗心大意检讨书
2014/09/18 职场文书
2015年财务经理工作总结
2015/05/13 职场文书
OpenCV 图像梯度的实现方法
2021/07/25 Python
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS