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中字典的键的使用
Aug 19 Python
Python面向对象编程中关于类和方法的学习笔记
Jun 30 Python
Python查询IP地址归属完整代码
Jun 21 Python
Python实现字符串逆序输出功能示例
Jun 24 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
Pandas GroupBy对象 索引与迭代方法
Nov 16 Python
Python将json文件写入ES数据库的方法
Apr 10 Python
Django Rest framework解析器和渲染器详解
Jul 25 Python
Python如何把十进制数转换成ip地址
May 25 Python
keras K.function获取某层的输出操作
Jun 29 Python
python修改微信和支付宝步数的示例代码
Oct 12 Python
Python&Matlab实现樱花的绘制
Apr 07 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 Undefined index和Undefined variable的解决方法
2008/03/27 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
2013/07/05 PHP
深入分析PHP引用(&)
2014/09/04 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
轻轻松松学习JavaScript
2007/02/25 Javascript
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
2013/04/02 Javascript
Javascript window对象详解
2014/11/12 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
2015/12/31 Javascript
jQuery的ajax下载blob文件
2016/07/21 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
Jquery获取radio选中值实例总结
2019/01/17 jQuery
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
Python方法的延迟加载的示例代码
2017/12/18 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
python实现多人聊天室
2020/03/31 Python
pytorch permute维度转换方法
2018/12/14 Python
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
python 如何设置守护进程
2020/10/29 Python
如何利用python 读取配置文件
2021/01/06 Python
计算机学生求职信范文
2014/01/30 职场文书
理工类毕业自我鉴定
2014/02/20 职场文书
捐助倡议书范文
2014/04/15 职场文书
就业协议书怎么填
2014/09/15 职场文书
童年读书笔记
2015/06/26 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书
机关单位2016年法制宣传日活动总结
2016/04/01 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang