2015年,Homebrew 的作者 Max Howell 在 Twitter 上发布了一条消息:
brew作者在Google挂了,还发twitter说,Google面试官说:对不起,虽然我们全公司的人都在用你的brew但是你竟然不能写出反转二叉树的代码,所以,滚吧。
你可以在leetcode上做这道题,有一种答案只需要8行代码。这个题目的难度属于Easy,根据leetcode的定义,如果Easy难度的题目无法在面试中答出来,确实是拿不到Offer的。
https://leetcode-cn.com/problems/invert-binary-tree/
从这道题我们可以看到,图中的左右子树进行了互换,而且是最大的树之内的任何一个子树而言,它的左右子树也都进行了反转。
一、递归
步骤如下:
- 翻转根节点的左子树(递归调用当前函数)
- 翻转根节点的右子树(递归调用当前函数)
- 交换根节点的左子节点与右子节点
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode invertTree (TreeNode root) {
if (root == null)
return null;
invertTree(root.left);//翻转根结点的左子树
invertTree(root.right);//翻转根结点的右子树
TreeNode tmp = root.left; //交换左子节点和右子节点
root.left <