首先要提一个软件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 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦


