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使用点操作符访问字典(dict)数据的方法
Mar 16 Python
Python字典及字典基本操作方法详解
Jan 30 Python
Python subprocess模块常见用法分析
Jun 12 Python
python实现n个数中选出m个数的方法
Nov 13 Python
Python发展简史 Python来历
May 14 Python
python lambda表达式在sort函数中的使用详解
Aug 28 Python
解决tensorflow添加ptb库的问题
Feb 10 Python
python中shell执行知识点
May 06 Python
Python 实现国产SM3加密算法的示例代码
Sep 21 Python
python 利用toapi库自动生成api
Oct 19 Python
python爬虫--selenium模块
Mar 31 Python
关于python pygame游戏进行声音添加的技巧
Oct 24 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也可以?成Shell Script
2006/10/09 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
php小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
Php无限级栏目分类读取的实现代码
2014/02/19 PHP
PHP进程同步代码实例
2015/02/12 PHP
php获取网站百度快照日期的方法
2015/07/29 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
学习ExtJS 访问容器对象
2009/10/07 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
jquery导航制件jquery鼠标经过变色效果示例
2013/12/05 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
JS判断字符串字节数并截取长度的方法
2016/03/05 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
React教程之Props验证的具体用法(Props Validation)
2017/09/04 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
2018/09/05 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
[51:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
学习python类方法与对象方法
2016/03/15 Python
Python实现删除列表中满足一定条件的元素示例
2017/06/12 Python
python实现换位加密算法的示例
2018/10/14 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
pytorch 常用线性函数详解
2020/01/15 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
Python 实现一个简单的web服务器
2021/01/03 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
致全体运动员广播稿
2014/02/01 职场文书
社区维稳工作方案
2014/06/06 职场文书
2016三八妇女节慰问信
2015/11/30 职场文书
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技