继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

明星程序员被Google挂掉的故事

昭昭li
关注TA
已关注
手记 115
粉丝 3867
获赞 281

首先要提一个软件Homebrew

Homebrew可能是Mac上最好用的包管理器, 地位相当于Ubuntu的apt, 也相当于命令行版的AppStore

700

Homebrew


700

brew

Max Howell是Homebrew的作者, 某天去google面试, 面试官出了一道反转二叉树的题目, 然而Max Howell没答上来, 最后, 就成为了一段佳话.

700

反转二叉树


  • Google面试官:Max Howell来我大Google,这是好事情,一定要留下他! 不能出太难的题,也不能太直白; 所以题目既要简单又要逼格,树结构应该是比较合适了,树里最常见的就是二叉树,考的最多的也是二叉搜索树了, 那就反转二叉树了吧, 哈哈, 我真的太tm机智了!

  • Max Howell: 老兄,你这让我很尴尬呀,今天的事儿就算了,求不说...

哈哈,挖坑不填不是我的风格,python版解题源码奉上!

class Node(object):
    def __init__(self, value = None):
        self.value = value
        self.left = None
        self.right = Noneclass Tree(object):
    def __init__(self):
        self.root = Node()
        self.queue = []        pass

    def add(self, value):
        # 创建一个节点
        tmp_node = Node(value)        # 如果根节点为空, 则添加根节点
        if len(self.queue) == 0:
            self.root = tmp_node
            self.queue.append(tmp_node)        # 如果根节点不为空
        else:            # 获取当前子树未满的节点(当前临时父节点)
            nowRoot = self.queue[0]            # 如果临时父节点左子树为空
            if nowRoot.left == None:
                nowRoot.left = tmp_node
                self.queue.append(tmp_node)            # 如果临时父节点右子树为空
            else:
                nowRoot.right = tmp_node
                self.queue.append(tmp_node)                # 从队列清除父节点(这个父节点现在已经满了)
                self.queue.pop(0)    # 中序遍历
    def recursion_lvr(self, root):
        # 如果节点为空, 则返回
        if not root:            return
        self.recursion_lvr(root.left)
        print(root.value)
        self.recursion_lvr(root.right)    # 反转二叉树(HomeBrew的作者被坑的题目)
    def reverse_tree(self, root):
        if not root:            return
        # 获取当前左右子树的根节点
        tmp_left_node = root.left
        tmp_right_node = root.right        # 反转二叉树的左右子树
        root.left = tmp_right_node
        root.right = tmp_left_node        # 将左右子树加入新的序列
        self.reverse_tree(root.left)
        self.reverse_tree(root.right)def main():
    tree = Tree()    for i in range(1,8):
        tree.add(i)

    tree.recursion_lvr(tree.root);

    tree.reverse_tree(tree.root)


    print("反转之后的结果:")
    tree.recursion_lvr(tree.root);if __name__ == '__main__':
    main()

综上所述, 算法的确很重要......




打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP