Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >请问你能徒手反转二叉树吗

请问你能徒手反转二叉树吗

作者头像
the5fire
发布于 2019-03-01 03:18:56
发布于 2019-03-01 03:18:56
1.5K00
代码可运行
举报
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.
翻译一下就是:Homebrew的作者去Google面试,结论是,Google说:我们90%的工程师都在用你写的Homebrew,但是你竟然不能在白板上徒手反转二叉树,滚蛋吧(这太操蛋了)

来,我们到leetcode刷题吧: https://leetcode.com/problems/invert-binary-tree#/

Python实现如下::

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# coding:utf-8
class TreeNode(object):
    def __init__(self, x, leftNode=None, rightNode=None):
        self.val = x
        self.left = leftNode
        self.right = rightNode

    def __str__(self):
        return str(self.val)


class Solution(object):
    def invert_tree(self, node):
        """
        :type node: TreeNode
        :rtype: TreeNode
        """
        if node:
            node.left, node.right = node.right, node.left
            if node.left:
                node.left = self.invert_tree(node.left)
            if node.right:
                node.right = self.invert_tree(node.right)
        return node


def print_tree(node=None, is_child=False, deep=3):
    if not node and is_child:
        return

    if not is_child:
        print node

    if not node.left and not node.right:
        return

    print "%s> " % node, node.left, node.right
    print_tree(node.left, is_child=True)
    print_tree(node.right, is_child=True)


if __name__ == '__main__':
    root = TreeNode(
        4,
        TreeNode(2, TreeNode(1), TreeNode(3)),
        TreeNode(7, TreeNode(6), TreeNode(9))
    )

    print_tree(root)
    print '====='
    solution = Solution()
    invert_node = solution.invert_tree(root)
    print_tree(invert_node)

如果你把这个问题作为面试题的话,应聘者写完之后,还可以继续问如下两个问题:

  • 你能写一个函数,用来输出二叉树吗,输出成图上的那个样子?
  • 你能把二叉树合并成有序排列的数组吗?

不过在我有限的几年工作中确实没用到过类似的算法,或许用过也忘记了,所以面试的时候问这个感觉没多大用。没事经常刷题的自然会做,平时大部分工作都是业务开发的话,遇到这个那就得靠临场反应了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-06-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python 刷题笔记:二叉树专题二
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。(即逐层地,从左到右访问所有节点)。
TTTEED
2020/07/09
7970
LeetCode 剑指 Offer 27. 二叉树的镜像
https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/
freesan44
2021/09/18
2360
LeetCode 剑指 Offer 27. 二叉树的镜像
LeetCode笔记:226. Invert Binary Tree
image.png Trivia: Google: 90% of our engineers use the software you wrote (Homebrew), >but you can’t invert a binary tree on a whiteboard so fuck off.
Cloudox
2021/11/23
2500
LeetCode笔记:226. Invert Binary Tree
打卡群刷题总结0813——二叉树展开为链表
链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list
木又AI帮
2020/08/17
3420
LeetCode 104. 二叉树的最大深度
https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/
freesan44
2021/09/22
2520
LeetCode 104. 二叉树的最大深度
LeetCode-面试题27-二叉树的镜像
一个二叉树的镜像就是把原本的子节点交换,一层一层来看,先要交换root节点的左右节点,然后分别交换左右节点的子节点,利用递归解决,终止条件是当遍历到左右子树为空或者头结点为空时跳出。
benym
2022/07/14
1550
打卡群刷题总结0602——二叉树的所有路径
链接:https://leetcode-cn.com/problems/binary-tree-paths
木又AI帮
2023/03/07
1740
打卡群刷题总结0602——二叉树的所有路径
【leetcode刷题】T143-二叉树的坡度
https://leetcode-cn.com/problems/binary-tree-tilt
木又AI帮
2019/08/19
4170
LeetCode 剑指 Offer 55 - I. 二叉树的深度
https://leetcode-cn.com/problems/er-cha-shu-de-shen-du-lcof/
freesan44
2021/09/18
2490
LeetCode 剑指 Offer 55 - I. 二叉树的深度
翻转二叉树
谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。
_kyle
2020/12/12
2630
​LeetCode刷题实战110:平衡二叉树
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
2780
​LeetCode刷题实战110:平衡二叉树
leetcode 每日一题:103.二叉树的锯齿形层序遍历
leetcode 每日一题:103.二叉树的锯齿形层序遍历:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/
用户7685359
2020/12/23
6030
LeetCode 226. 翻转二叉树
谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。
freesan44
2020/03/20
3270
打卡群刷题总结0808——二叉树的层序遍历
PS:刷了打卡群的题,再刷另一道题,并且总结,确实耗费很多时间。如果时间不够,以后的更新会总结打卡群的题。
木又AI帮
2020/08/11
2260
剑指offer | 面试题21:二叉树的镜像
二叉树镜像定义: 对于二叉树中任意节点 root ,设其左 / 右子节点分别为 left, right;则在二叉树的镜像中的对应 root节点,其左 / 右子节点分别为 right, left 。
千羽
2021/12/29
1960
剑指offer | 面试题21:二叉树的镜像
打卡群刷题总结0809——二叉树的锯齿形层次遍历
链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal
木又AI帮
2020/08/11
2340
【leetcode刷题】T122-二叉树的最小深度
https://leetcode-cn.com/problems/minimum-depth-of-binary-tree
木又AI帮
2019/07/24
3860
【leetcode刷题】T142-二叉树的直径
https://leetcode-cn.com/problems/diameter-of-binary-tree/
木又AI帮
2019/08/19
4130
LeetCode-面试题32-1-从上到下打印二叉树
# LeetCode-面试题32-1-从上到下打印二叉树 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 例如: 给定二叉树: [3,9,20,null,null,15,7], ​ 3 / 9 20 / 15 7 返回: [3,9,20,15,7] 提示: 节点总数 <= 1000 # 解题思路 BFS就完事儿了..... 用一个队列Queue保存节点,标准BFS遍历模版如下: 将root节点放入queue 重复以下2个步骤,直到queue为空为止: 取出que
benym
2022/07/14
1600
【leetcode刷题】T133-二叉树的所有路径
https://leetcode-cn.com/problems/binary-tree-paths/
木又AI帮
2019/08/06
4650
相关推荐
Python 刷题笔记:二叉树专题二
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验