看了下翻转二叉树,
Max Howell 很强的一句:我们 90% 的工程师使用您编写的软件( Homebrew ),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。
这道题,使用递归,看语句非常直观。(代码见图片, Swift 4.2 )
交换结点的左子结点和右子结点, 递归下去, 交换每一个存在结点的左子结点和右子结点。
语句非常好理解。
想象一下这个过程,挺能帮助理解递归的。
例如:
root 参数,在函数递归调用栈,中扮演的角色 。 第一轮, root 是外部传参, 之后 root 就是子结点了。
最后一层,叶子结点作为 root 传进去, 下面这两行递归函数,就没做事情,直接 return 。
倒数第二层的结点,每一颗两层的子树的左结点放进去, 直接返回了, 安排在他的右结点上。
Max Howell 很强的一句:我们 90% 的工程师使用您编写的软件( Homebrew ),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。
这道题,使用递归,看语句非常直观。(代码见图片, Swift 4.2 )
交换结点的左子结点和右子结点, 递归下去, 交换每一个存在结点的左子结点和右子结点。
语句非常好理解。
想象一下这个过程,挺能帮助理解递归的。
例如:
root 参数,在函数递归调用栈,中扮演的角色 。 第一轮, root 是外部传参, 之后 root 就是子结点了。
最后一层,叶子结点作为 root 传进去, 下面这两行递归函数,就没做事情,直接 return 。
倒数第二层的结点,每一颗两层的子树的左结点放进去, 直接返回了, 安排在他的右结点上。
展开
评论
点赞
![[西瓜]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_138.b0effa7.png)
![[思考]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_15.f58c082.png)
![[呲牙]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_2.cd1e2bd.png)