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编程实现语音控制电脑
Apr 01 Python
Windows下用py2exe将Python程序打包成exe程序的教程
Apr 08 Python
python实现中文输出的两种方法
May 09 Python
通过数据库对Django进行删除字段和删除模型的操作
Jul 21 Python
在Python的Django框架中显示对象子集的方法
Jul 21 Python
flask框架使用orm连接数据库的方法示例
Jul 16 Python
浅述python中深浅拷贝原理
Sep 18 Python
树莓派使用USB摄像头和motion实现监控
Jun 22 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
Jul 22 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
Jan 09 Python
Python如何解除一个装饰器
Aug 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
PHP5 安装方法
2007/01/15 PHP
php多层数组与对象的转换实例代码
2013/08/05 PHP
PHP上传文件及图片到七牛的方法
2018/07/25 PHP
javascript Prototype 对象扩展
2009/05/15 Javascript
javascript 数组排序函数
2009/08/20 Javascript
js 禁用只读文本框获得焦点时的退格键
2010/04/25 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
jquery插件开发方法(初学者)
2012/02/03 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
在Vue中如何使用Cookie操作实例
2017/07/27 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
微信小程序—setTimeOut定时器的问题及解决
2019/07/26 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
微信小程序实现星级评价
2019/11/20 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
Python复制目录结构脚本代码分享
2015/03/06 Python
python snownlp情感分析简易demo(分享)
2017/06/04 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
pandas将numpy数组写入到csv的实例
2018/07/04 Python
python得到windows自启动列表的方法
2018/10/14 Python
Python利用itchat库向好友或者公众号发消息的实例
2019/02/21 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
python实现一次性封装多条sql语句(begin end)
2020/06/06 Python
Python LMDB库的使用示例
2021/02/14 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
最新的咖啡店创业计划书
2013/12/30 职场文书
关于环保的建议书400字
2014/03/12 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
小学总务工作总结
2015/08/13 职场文书
OpenCV实现普通阈值
2021/11/17 Java/Android
python周期任务调度工具Schedule使用详解
2021/11/23 Python