博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Leetcode] Invert Binary Tree 翻转二叉树
阅读量:6274 次
发布时间:2019-06-22

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

Invert Binary Tree

Invert a binary tree.

4   /   \  2     7 / \   / \1   3 6   9

to

4   /   \  7     2 / \   / \9   6 3   1

Trivia: This problem was inspired by this original tweet by Max

Howell:

Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.

递归法

复杂度

时间 O(N) 空间 O(N) 递归栈空间

思路

这个难倒Max Howell大神的题也是非常经典的一道测试对二叉树遍历理解的题。递归的终止条件是当遇到空节点或叶子节点时,不再交换,直接返回该节点。对于其他的节点,我们分别交换它的左子树和右子树,然后将交换过后的左子树赋给右节点,右子树赋给左节点。代码给出的是后序遍历的自下而上的交换,先序遍历的话就是自上而下的交换。

代码

public class TreeNode {    int val;    TreeNode left;    TreeNode right;    TreeNode(int x) { val = x; }}public class Solution {    public TreeNode invertTree(TreeNode root) {        if(root == null || (root.left == null && root.right == null)) return root;        TreeNode newLeft = invertTree(root.right);        TreeNode newRight = invertTree(root.left);        root.left = newLeft;        root.right = newRight;        return root;    }}

迭代法

复杂度

时间 O(N) 空间 O(1)

思路

迭代法的思路是BFS或者DFS,这两种方法都可以实现,实际上也是二叉树的遍历。BFS用Queue实现,DFS的话将代码中的Queue换成Stack。

代码

public class Solution {    public TreeNode invertTree(TreeNode root) {        Queue
q = new LinkedList
(); if(root!=null) q.offer(root); while(!q.isEmpty()){ TreeNode curr = q.poll(); TreeNode tmp = curr.right; curr.right = curr.left; curr.left = tmp; if(curr.left!=null) q.offer(curr.left); if(curr.right!=null) q.offer(curr.right); } return root; }}

转载地址:http://szmpa.baihongyu.com/

你可能感兴趣的文章
modprobe
查看>>
android中用ExpandableListView实现三级扩展列表
查看>>
%Error opening tftp://255.255.255.255/cisconet.cfg
查看>>
java读取excel、txt 文件内容,传到、显示到另一个页面的文本框里面。
查看>>
《从零开始学Swift》学习笔记(Day 51)——扩展构造函数
查看>>
python多线程队列安全
查看>>
[汇编语言学习笔记][第四章第一个程序的编写]
查看>>
android 打开各种文件(setDataAndType)转:
查看>>
补交:最最原始的第一次作业(当时没有选上课,所以不知道)
查看>>
Vue实例初始化的选项配置对象详解
查看>>
PLM产品技术的发展趋势 来源:e-works 作者:清软英泰 党伟升 罗先海 耿坤瑛
查看>>
vue part3.3 小案例ajax (axios) 及页面异步显示
查看>>
软件测试(二)之 Failure, Error & Fault
查看>>
浅谈MVC3自定义分页
查看>>
.net中ashx文件有什么用?功能有那些,一般用在什么情况下?
查看>>
select、poll、epoll之间的区别总结[整理]【转】
查看>>
CSS基础知识(上)
查看>>
PHP中常见的面试题2(附答案)
查看>>
26.Azure备份服务器(下)
查看>>
mybatis学习
查看>>