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中使用第三方库xlutils来追加写入Excel文件示例
Apr 05 Python
Python使用os模块和fileinput模块来操作文件目录
Jan 19 Python
详解Python使用simplejson模块解析JSON的方法
Mar 24 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
Jul 12 Python
在Linux命令行终端中使用python的简单方法(推荐)
Jan 23 Python
Python配置mysql的教程(推荐)
Oct 13 Python
Django 1.10以上版本 url 配置注意事项详解
Aug 05 Python
python+adb+monkey实现Rom稳定性测试详解
Apr 23 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 Python
python 下载文件的几种方法汇总
Jan 06 Python
Python离线安装openpyxl模块的步骤
Mar 30 Python
Python selenium绕过webdriver监测执行javascript
Apr 12 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
星际争霸中的对战模式介绍
2020/03/04 星际争霸
摩卡咖啡
2021/03/03 咖啡文化
php中global和$GLOBALS[]的分析之一
2012/02/02 PHP
学习php设计模式 php实现观察者模式(Observer)
2015/12/09 PHP
Javascript 继承实现例子
2009/08/12 Javascript
Javascript常考语句107条收集
2010/03/09 Javascript
jquery 全局AJAX事件使用代码
2010/11/05 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
2015/02/20 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
基于MVC方式实现三级联动(JavaScript)
2017/01/23 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
2018/11/15 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
Map与WeakMap类型在JavaScript中的使用详解
2020/11/18 Javascript
[05:09]2016国际邀请赛中国区预选赛淘汰赛首日精彩回顾
2016/06/29 DOTA
Python功能键的读取方法
2015/05/28 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
联强国际笔试题面试题
2013/07/10 面试题
清洁工岗位职责
2014/01/29 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
挂职个人工作总结
2015/03/05 职场文书
讲座通知范文
2015/04/23 职场文书
2015年七一建党节活动方案
2015/05/05 职场文书
一文帮你理解PReact10.5.13源码
2021/04/03 Javascript
Python Django获取URL中的数据详解
2021/11/01 Python
SQL Server中的游标介绍
2022/05/20 SQL Server