博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
226. Invert Binary Tree
阅读量:6515 次
发布时间:2019-06-24

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

题目:

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  by :

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.

链接: 

题解:

其实我还加这哥们LinkedIn了...后来他被Apple录取了,挺好的。 使用Recursive比较快就能写出来。

Time Complexity - O(n), Space Complexity - O(n)。

/** * Definition for a binary tree node. * 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)            return root;        TreeNode left = root.left;        root.left = invertTree(root.right);        root.right = invertTree(left);                return root;    }}

 

二刷:

使用递归求解比较方便。先保存左子树,,再更新左子树和右子树,最后返回root。

Java:

Time Complexity - O(n), Space Complexity - O(n)。

/** * Definition for a binary tree node. * 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) {            return root;        }        TreeNode tmpLeft = root.left;        root.left = invertTree(root.right);        root.right = invertTree(tmpLeft);        return root;    }}

 

使用一个stack来迭代

/** * Definition for a binary tree node. * 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) {            return root;        }        LinkedList
stack = new LinkedList<>(); stack.addLast(root); while (stack.size() > 0) { TreeNode node = stack.pollLast(); if (node != null) { TreeNode tmp = node.left; node.left = node.right; node.right = tmp; stack.addLast(node.left); stack.addLast(node.right); } } return root; }}

 

三刷:

Java:

/** * Definition for a binary tree node. * 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) {            return root;        }        TreeNode tmpLeft = root.left;        root.left = invertTree(root.right);        root.right = invertTree(tmpLeft);        return root;    }}

 

使用一个stack来模拟系统栈, 用Queue也可以。 以后我决定在面试里就写stack,不用Doubly LinkedList了。这样表达更清晰。自己清楚Stack是继承自vector,并且是depricated就可以了,在production上不用, 面试时提一下。

/** * Definition for a binary tree node. * 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) {            return root;        }        Stack
stack = new Stack<>(); stack.push(root); while (!stack.isEmpty()) { TreeNode node = stack.pop(); if (node != null) { TreeNode tmpLeft = node.left; node.left = node.right; node.right = tmpLeft; stack.push(node.left); stack.push(node.right); } } return root; }}

 

用Queue的

/** * Definition for a binary tree node. * 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) return root;        Queue
q = new LinkedList<>(); q.offer(root); while (!q.isEmpty()) { TreeNode node = q.poll(); if (node != null) { q.offer(node.left); q.offer(node.right); TreeNode tmp = node.left; node.left = node.right; node.right = tmp; } } return root; }}

 

 

Reference:

https://leetcode.com/discuss/40001/straightforward-dfs-recursive-iterative-bfs-solutions

https://leetcode.com/discuss/40051/3-4-lines-python

 

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

你可能感兴趣的文章
解决Chrome浏览器自动记录用户名和密码的黄色背景问题和该解决方法与tab切换至下一个input冲突的问题。...
查看>>
使用HTMLTestRunner生产报告
查看>>
图文混排(2) 详解版
查看>>
草根程序员转型做项目管理走过的点点滴滴之(七、八)人团队
查看>>
黑色背景的好处
查看>>
【原创】Linux环境下的图形系统和AMD R600显卡编程(2)——Framebuffer、DRM、EXA和Mesa简介【转】...
查看>>
LeetCode OJ:Sum Root to Leaf Numbers(根到叶节点数字之和)
查看>>
string.IsNullOrWhiteSpace
查看>>
云计算是关于信任的生意,有人说他要做三年赚200亿美元的互联网项目,但他要依靠别人的云计算服务,没有这个勇气,是不可能创新的。...
查看>>
微信公众号开发之用户地理位置坐标转百度坐标
查看>>
与君相恋100次
查看>>
cmd命令添加一个应用程序到防火墙例外项中
查看>>
常见面试算法题JS实现-设计一个有getMin功能的栈
查看>>
vimrc
查看>>
关于docker日常操作(一)
查看>>
付费中数字计算
查看>>
[洛谷P4178]Tree
查看>>
算法 之 插入排序 的 JS 实现
查看>>
关于泛型的知识
查看>>
KudyStudio文章目录
查看>>