博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
翻转二叉树
阅读量:6192 次
发布时间:2019-06-21

本文共 823 字,大约阅读时间需要 2 分钟。

  hot3.png

思路:从根节点起,将每一个节点的左子树和右子树进行交换即可完成二叉树的翻转 。这是一个典型的可以使用递归解决的问题。

翻转二叉树的递归实现:

class TreeNode(object):    def __init__(self, data):        self.data = data        self.left = None        self.right = Nonedef invert_tree(node):    if node is None:        return None    node.left, node.right = invert_tree(node.right), invert_tree(node.left)    return node

用递归可以解决的问题,同样使用迭代也可以解决 。

迭代时可以使用队列, 从根节点开始入栈,出栈,交换左右子树,然后左子树和右子树再分别入栈 ,这样就可以以层次遍历的方式翻转二叉树了 。

代码实现:

def invert_tree(node):    if node is None:        return None    queue = collections.deque()    if node:        queue.append(node)    while queue:        n = queue.popleft()        if n.left:            queue.append(n.left)        if n.right:            queue.append(n.right)        n.left, n.right = n.right, n.left    return node

 

转载于:https://my.oschina.net/zhxx/blog/3039241

你可能感兴趣的文章
【零基础学习iOS开发】【01-前言】03-前景和难易度分析
查看>>
程序环境基于 IO密集 & CPU密集考量 SAN & NAS 选择的一点建议
查看>>
SQL Server修改标识列方法
查看>>
Scrolling DIV and Canvas flicker on iPhone/iPad touch
查看>>
输入状态HDU 2577 动态规划(DP) How to Type
查看>>
优化网站设计(三十二):使favicon.ico文件尽可能小并且可以缓存
查看>>
服务器文件[置顶] nginx的配置和使用
查看>>
组件实现【技术分享】发布本人所属 Java 与 C++ 开源项目
查看>>
【原】PNG的使用技巧
查看>>
动态引用外部的Javascript脚本文件
查看>>
window下jni调用dll和linux下jni调用so库(转)
查看>>
Windows Phone button中tag的绑定
查看>>
Revit阵列工具
查看>>
IIS状态码大全【转】
查看>>
SQL Server 2014新特性探秘(2)-SSD Buffer Pool Extension
查看>>
【译】用jQuery 处理XML-- DOM(文本对象模型)简介
查看>>
缓存、缓存算法和缓存框架简介
查看>>
线程池
查看>>
win32多线程-异步过程调用(asynchronous Procedure Calls, APCs)
查看>>
Linux内核加载全流程
查看>>