力扣226:
翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
备注:
这个问题是受到 Max Howell 的 原问题 启发的 :
谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。
Tips:Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。在 2009 年由马克斯·霍威尔(Max Howell)写成,他是一名 OS X/iOS 业界知名的软件工程师,是早先著名的网络电台 Last.fm 的首席客户端开发者、Twitter 客户端 TweetDeck 的首席移动开发者。然后马克斯·霍威尔在Google面试后在推特上吐槽了一把:
根据 Howell 在 Twitter 上的对话记录,他当时是去面试一个 iOS 的职位,「我当真可以算 iOS 业界的专家了,那家伙几乎没问我任何有关 iOS 的问题。」
不过到底马克斯·霍威尔是不是仅仅因为这个题目被Google拒掉的,这个就不得而知了,因为像Google这样的公司招聘一个人,算法能力是极其重要的能力和门槛,但却不是唯一的能力。
方法
还是用递归来解决,先递归调用反转根节点的左孩子,然后递归调用反转根节点的右孩子,然后左右交换根节点的左孩子和右孩子。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null)
return null;
invertTree(root.left);
invertTree(root.right);
TreeNode tem=root.left;
root.left=root.right;
root.right=tem;
return root;
}
}