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 29 Python
使用httplib模块来制作Python下HTTP客户端的方法
Jun 19 Python
python模块之sys模块和序列化模块(实例讲解)
Sep 13 Python
python安装模块如何通过setup.py安装(超简单)
May 05 Python
Django 限制用户访问频率的中间件的实现
Aug 23 Python
记录Python脚本的运行日志的方法
Jun 05 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
Jun 17 Python
Python 获取windows桌面路径的5种方法小结
Jul 15 Python
django-rest-framework解析请求参数过程详解
Jul 18 Python
关于多元线性回归分析——Python&SPSS
Feb 24 Python
基于Python爬虫采集天气网实时信息
Jun 05 Python
python3字符串输出常见面试题总结
Dec 01 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
在WIN98下以apache模块方式安装php
2006/10/09 PHP
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
PHP简单留言本功能实现代码
2017/06/09 PHP
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
JavaScript中定义类的方式详解
2016/01/07 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
详解webpack es6 to es5支持配置
2017/05/04 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
2018/05/02 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
python3序列化与反序列化用法实例
2015/05/26 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
Python for Informatics 第11章 正则表达式(一)
2016/04/21 Python
Python中运算符"=="和"is"的详解
2016/10/08 Python
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
Python语法之精妙的十个知识点(装B语法)
2020/01/18 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
秋天的怀念教学反思
2014/04/28 职场文书
专家推荐信模板
2014/05/09 职场文书
党员个人剖析材料(四风问题)
2014/10/07 职场文书
2014年村委会工作总结
2014/11/24 职场文书
公司行政管理制度范本
2015/08/05 职场文书
同学聚会开幕词
2019/04/02 职场文书
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
python中urllib包的网络请求教程
2022/04/19 Python