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中unittest实现简单的单元测试实例详解
Jan 09 Python
python抓取文件夹的所有文件
Feb 27 Python
对python for 文件指定行读写操作详解
Dec 29 Python
Python绘制并保存指定大小图像的方法
Jan 10 Python
Python批量删除只保留最近几天table的代码实例
Apr 01 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
Jun 14 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
Aug 13 Python
Python 输出详细的异常信息(traceback)方式
Apr 08 Python
keras用auc做metrics以及早停实例
Jul 02 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
Jul 14 Python
使用python操作lmdb对数据读取的实例
Dec 11 Python
教你用Python matplotlib库制作简单的动画
Jun 11 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读取javascript设置的cookies的代码
2010/04/12 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
使用正则替换变量
2007/05/05 Javascript
javascript 新浪背投广告实现代码
2009/07/07 Javascript
js几个验证函数代码
2010/03/25 Javascript
利用location.hash实现跨域iframe自适应
2010/05/04 Javascript
基于jQuery的倒计时插件代码
2011/05/07 Javascript
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
js捕获鼠标滚轮事件代码
2013/12/16 Javascript
jQuery 隐藏和显示 input 默认值示例
2014/06/03 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
浅谈python 里面的单下划线与双下划线的区别
2017/12/01 Python
Python使用numpy实现BP神经网络
2018/03/10 Python
Python单元测试工具doctest和unittest使用解析
2019/09/02 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
2020/07/13 Python
python pip如何手动安装二进制包
2020/09/30 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
2020/10/19 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
启动一个线程是用run()还是start()
2016/12/25 面试题
应届大学生求职的自我评价
2013/11/17 职场文书
超市5.1促销活动
2014/01/15 职场文书
初二学习计划书范文
2014/04/27 职场文书
行政专员求职信范文
2014/05/03 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
代理词怎么写
2015/05/25 职场文书
初中团支书竞选稿
2015/11/21 职场文书
学校教代会开幕词
2016/03/04 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技