看了下翻转二叉树,

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


这道题,使用递归,看语句非常直观。(代码见图片, Swift 4.2 )


交换结点的左子结点和右子结点, 递归下去, 交换每一个存在结点的左子结点和右子结点。

语句非常好理解。

想象一下这个过程,挺能帮助理解递归的。

例如:
root 参数,在函数递归调用栈,中扮演的角色 。 第一轮, root 是外部传参, 之后 root 就是子结点了。


最后一层,叶子结点作为 root 传进去, 下面这两行递归函数,就没做事情,直接 return 。


倒数第二层的结点,每一颗两层的子树的左结点放进去, 直接返回了, 安排在他的右结点上。
展开
东方老白于2018-09-02 07:31发布的图片
评论