【每日算法】力扣226. 翻转二叉树

145 阅读2分钟

「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战」。

描述

翻转一棵二叉树。

示例:

输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9
输出:

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

备注: 这个问题是受到 Max Howell 的 原问题 启发的 :

谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。

还是要好好刷算法啊,不然面试官想放水都放不了🤦‍

做题

我还没做之前觉得还是挺难的,做完之后觉得不过如此。

如果是只有一个根节点,再加两个叶子节点,如下。

     4
   /   \
  2     7

那么我们直接对调左右子节点就可以了。

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

那再给 2,7 增加左右子节点,那它们的处理跟只有一个根节点的处理是一样的。

所以我们只需要对调当前节点的左右子节点,然后再把左右子节点分别丢进自身的方法去,让它们各自对调自己的左右子节点。

public TreeNode invertTree(TreeNode root) {
        if(root == null){
            return root;
        }
        //翻转
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
        //递归翻转左右子节点
        invertTree(root.right);
        invertTree(root.left);
        return root;
    }

image.png

最后

这道题真的是放水题啊,不能不会啊。

不刷刷算法,公司想放水都放不了,算法通胀时代到来了。原来都可以不刷的,但有人刷了,有了优势,于是人人都刷了。

今天就到这里了。

这里是程序员徐小白,【每日算法】是我新开的一个专栏,在这里主要记录我学习算法的日常,也希望我能够坚持每日学习算法,不知道这样的文章风格您是否喜欢,不要吝啬您免费的赞,您的点赞、收藏以及评论都是我下班后坚持更文的动力。