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写xml文件的操作实例
Oct 05 Python
Python 列表list使用介绍
Nov 30 Python
python删除特定文件的方法
Jul 30 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
Mar 14 Python
python编辑用户登入界面的实现代码
Jul 16 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
Oct 26 Python
python中图像通道分离与合并实例
Jan 17 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
Feb 29 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 Python
如何理解python对象
Jun 21 Python
Python基础之tkinter图形化界面学习
Apr 29 Python
python实现股票历史数据可视化分析案例
Jun 10 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删除数组中的特定元素的代码
2012/06/28 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
php制作文本式留言板
2015/03/18 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
yii框架数据库关联查询操作示例
2019/10/14 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
开发跨浏览器javascript常见注意事项
2009/01/01 Javascript
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
实现前后端数据交互方法汇总
2015/04/07 Javascript
javascript事件处理模型实例说明
2016/05/31 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
详解javascript对数组和json数组的操作
2019/04/15 Javascript
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
详解Python打包分发工具setuptools
2019/08/05 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
python 数据分析实现长宽格式的转换
2020/05/18 Python
python与idea的集成的实现
2020/11/20 Python
Python非单向递归函数如何返回全部结果
2020/12/18 Python
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
新闻记者个人求职的自我评价
2013/11/28 职场文书
高二地理教学反思
2014/01/24 职场文书
三八妇女节活动总结
2014/05/04 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
工会经费申请报告
2015/05/15 职场文书
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android
Golang 入门 之url 包
2022/05/04 Golang