這道題目是一道很經典的關於二叉樹的演算法題,題目如下:
題目的描述非常簡單,就是翻轉一棵給定的二叉樹,然而有趣的是這個備註,這個故事是 mac 系統的包管理工具 homebrew 的開發者 max howell 去谷歌面試的時候沒有做出這道面試題而遭淘汰了,所以這道題目也是引發血案的一道二叉樹題目。
其實這道題目比較標準的解法是用到遞迴的思想,運用遞迴呼叫來對左右子樹的二叉樹進行翻轉交換操作,**也很簡單:
# definition for a binary tree node.
# class treenode(object):
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class solution(object):
def inverttree(self, root):
""":type root: treenode
:rtype: treenode
"""if root == none:
return root
else:
root.left, root.right = self.inverttree(root.right), self.inverttree(root.left)
return root
通過遞迴呼叫本身來實現演算法,**易讀且思路清晰,希望這道題目的解答可以幫助大家更好地理解遞迴的思想和二叉樹,謝謝。 leetcode 226 翻轉二叉樹
翻轉一棵二叉樹。示例 輸入 4 2 7 1 3 6 9輸出 4 7 2 9 6 3 1備註 這個問題是受到 max howell 的 原問題 啟發的 谷歌 我們90 的工程師使用您編寫的軟體 homebrew 但是您卻無法在面試時在白板上寫出翻轉二叉樹這道題,這太糟糕了。definition for...
leetcode226 翻轉二叉樹
翻轉一棵二叉樹。示例 輸入 4 2 7 1 3 6 9 輸出 4 7 2 9 6 3 1 思路 有關樹的問題要想到遞迴,遞迴的想法很簡單,將根的左右子樹互換之後,再已左右子樹為根繼續互換。遞迴最重要的就是終止條件,如果傳入的是空指標,或者葉節點,那麼不需要再遞迴了,直接返回根節點。需要注意的是,在子...
LeetCode 226 翻轉二叉樹
自己寫的遞迴的解法,還是比較高效的。class solution 看完討論區後自己寫的迭代的解法 輔助資料結構用佇列和棧都可以 class solution return root class solution return root 討論區優秀題解 1 前中後序遍歷 treenode invert...