首先要提一个软件Homebrew
Homebrew可能是Mac上最好用的包管理器, 地位相当于Ubuntu的apt, 也相当于命令行版的AppStore
Homebrew
brew
Max Howell是Homebrew的作者, 某天去google面试, 面试官出了一道反转二叉树的题目, 然而Max Howell没答上来, 最后, 就成为了一段佳话.
反转二叉树
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()
综上所述, 算法的确很重要......
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦