首先要提乙個軟體homebrew
max howell是homebrew的作者, 某天去google面試, 面試官出了一道反轉二叉樹的題目, 然而max howell沒答上來, 最後, 就成為了一段佳話.
哈哈,挖坑不填不是我的風格,python版解題原始碼奉上!
class
node
(object):
def__init__
(self, value = none):
self.value = value
self.left = none
self.right = none
class
tree
(object):
def__init__
(self):
self.root = node()
self.queue =
pass
defadd
(self, value):
# 建立乙個節點
tmp_node = node(value)
# 如果根節點為空, 則新增根節點
if len(self.queue) == 0:
self.root = tmp_node
# 如果根節點不為空
else:
# 獲取當前子樹未滿的節點(當前臨時父節點)
nowroot = self.queue[0]
# 如果臨時父節點左子樹為空
if nowroot.left == none:
nowroot.left = tmp_node
# 如果臨時父節點右子樹為空
else:
nowroot.right = tmp_node
# 從佇列清除父節點(這個父節點現在已經滿了)
self.queue.pop(0)
# 中序遍歷
defrecursion_lvr
(self, root):
# 如果節點為空, 則返回
ifnot root:
return
self.recursion_lvr(root.left)
print(root.value)
self.recursion_lvr(root.right)
# 反轉二叉樹(homebrew的作者被坑的題目)
defreverse_tree
(self, root):
ifnot 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)
defmain
(): 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()
複製**
綜上所述, 演算法的確很重要......
程式設計師的故事 1
乙個人一台電腦,這就是我自己的故事。當程式設計師當了這麼多年,從中學到大學,到工作,有過高傲,受過打擊,被人整過,憤憤不平,終於成熟之後的發展。想把這些分 20年寫成的東西一步步發表出來,幾本上一年一篇。這就是我 乙個活生生的程式設計師 的故事。開篇1 16歲的小鬼太吸引了。學習的壓力那麼大,而我又...
成為明星程式設計師的10個提示
andrew c.oliver是open software integrators公司的總裁與創始人,公司主要與一些開源公司合作,特別是那些初創公司,致力於為客戶提供課程開發 培訓 諮詢與支援等服務。合作夥伴可以將精力放在核心的業務領域上,公司則為其提供專業的服務。近日,andrew撰文談到了對於程...
成為明星程式設計師的10個提示
英文原文 10 steps to becoming the developer everyone wants andrew c.oliver 是 open software integrators 公司的總裁與創始人,公司主要與一些開源公司合作,特別是那些初創公司,致力於為客戶提供課程開發 培訓 諮...