美文网首页
难倒Homebrew发明人的翻转二叉树到底有多简单?

难倒Homebrew发明人的翻转二叉树到底有多简单?

作者: 泰克尼客 | 来源:发表于2021-04-25 10:59 被阅读0次

什么是翻转二叉树

大家都知道Homebrew发明人Max Howell面试谷歌时,被一道翻转二叉树的题目给难倒了。那么什么是翻转二叉树呢?看看下图就明白了。


翻转二叉树.png

简单地说,就是对于一棵二叉树及其所有子树,交换其左右位置。

思路

首先,看到一棵二叉树时,我们不要被庞大的分支结构所吓倒,其实,其基本构成就是根节点左子树右子树这三个元素而已。大多数问题只需要考虑这三者之间的关系就能被解决;
其次,对于树相关的问题,我们的第一反应是尝试能否通过递归的方法来实现。

理清了二叉树的基本结构(根节点左子树右子树),并使用递归的思路来思考,自然可以得出下面的递归过程:

  • 让左子树完成翻转
  • 让右子树完成翻转
  • 交换左右子树

自然就能完成全部的翻转过程了。可以参考下图:

翻转过程.png
我们先完成了左子树的翻转,接着完成了右子树的翻转,最后在根节点处交换了左右子树。可以很自然地写出如下的递归代码:
class Solution:
    def invertTree(self, root: TreeNode) -> TreeNode:
        left = self.invertTree(root.left)
        right = self.invertTree(root.right)
        root.left, root.right = right, left
        return root

考虑递归终止条件后的最终代码

递归相关的代码,最重要的有两点,一是理清递归的思路,也就是上文所述的内容,另一点是递归的终止条件。从上述递归过程可以知道,当根节点为空或者递归到叶子节点时,由于左右子树均为空,那么直接返回就行了。所以为完备性考虑,修正递归代码为:

class Solution:
    def invertTree(self, root: TreeNode) -> TreeNode:
        if not root:
            return root
        
        left = self.invertTree(root.left)
        right = self.invertTree(root.right)
        root.left, root.right = right, left
        return root

回顾

树相关的操作,先考虑递归能否实现,所谓的递归过程,也无非是考虑根节点左子树右子树三者之间的关系。最后再考虑一下根节点为空叶子节点的边界情况,那么基本能写个七七八八出来了。好了,这样就可以胜过Max Howell了。狗头滚粗...

相关文章

  • 难倒Homebrew发明人的翻转二叉树到底有多简单?

    什么是翻转二叉树 大家都知道Homebrew发明人Max Howell面试谷歌时,被一道翻转二叉树的题目给难倒了。...

  • LeetCode 226. 翻转二叉树

    226. 翻转二叉树 翻转一棵二叉树。 示例: 备注: 谷歌:我们90%的工程师使用您编写的软件(Homebrew...

  • 每周 ARTS 第 10 期

    1. Algorithm 226. 翻转二叉树(简单) 描述: 翻转一棵二叉树 示例: 思路: 递归法:翻转一个二...

  • 大名鼎鼎的Invert Binary Tree

    这道难倒了Max Howell的二叉树翻转没想到这么快就加入了Leetcode豪华套餐。题目链接如下:Invert...

  • Swift实践翻转二叉树

    HomeBrew作者,天才程序员Max Howell去Google面试),结果却因不会在白板上翻转二叉树被Goog...

  • leecode刷题(24)-- 翻转二叉树

    leecode刷题(24)-- 翻转二叉树 翻转二叉树 翻转一棵二叉树。 示例: 输入: 输出: 备注:这个问题是...

  • leetcode 226. 翻转二叉树

    题目描述 翻转一棵二叉树。相关话题: 树    难度: 简单 示例

  • LeetCode题解之翻转二叉树

    翻转二叉树 题目描述 翻转一棵二叉树。 示例 : 输入: 输出: 解题思路 方法一:递归 使用递归来翻转二叉树。 ...

  • 226. 翻转二叉树 各种解法

    题目描述:翻转一棵二叉树。 谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白...

  • 翻转二叉树

    最近在找工作,所以这些算法梗又出现在了我的阅读视野里,比如经典的homebrew作者吐槽的翻转二叉树的问题。 我本...

网友评论

      本文标题:难倒Homebrew发明人的翻转二叉树到底有多简单?

      本文链接:https://www.haomeiwen.com/subject/dqtdrltx.html