leetcode 226 翻轉二叉樹

2021-10-09 18:14:10 字數 1342 閱讀 6055

翻轉一棵二叉樹。

示例:

homebrew的作者howell去面試谷歌慘遭拒絕,因為他不會翻轉二叉樹,即使谷歌公司90%的工程師都在使用他寫的軟體。

之後leetcode把這道題納入了題庫,並將難度標記為簡單題...

我要是會了這道題,那我可以進谷歌啊?

當然,把這件事當做乙個小故事看看算了。

企業拒絕乙個人才的原因有很多,我在知乎上看到一些很有意思的回答。如何評價 homebrew 作者因為不會在白板上翻轉二叉樹而被谷歌面試拒絕?

在這裡放上乙個動畫,這樣顯得比較直觀,動畫來自於leetcode上的題解。

以上面的動畫為例,翻轉一顆以4作為根節點的二叉樹,需要走以下的步驟

對於根節點4,首先翻轉它的左右兩個子樹2和7

然後把以2作為根節點的左右子樹進行翻轉

最後把以7作為根節點的左右子樹進行翻轉

所以,這裡是乙個遞迴呼叫的過程,遞迴終止條件時遇到null節點,null節點不用翻轉,直接退出。

遞迴的每次任務,先是翻轉左右子樹,再翻轉左子樹節點的左右子樹,最後翻轉右子樹節點的左右子樹。

因此,該方案的時間複雜度取決於訪問節點的數量,因為要訪問每個節點,所以為o(n),n為節點總數。

空間複雜度取決與遞迴次數,即棧的深度,這裡就是指樹的高度。節點總數為n的二叉樹,數的高度在平均情況下為logn,因此空間複雜度為o(logn)。

public treenode inverttree(treenode root) 

//翻轉root節點的左右子樹

treenode temp = root.left;

root.left = root.right;

root.right = temp;

//翻轉left節點的左右子樹

inverttree(root.left);

//翻轉right節點的左右子樹

inverttree(root.right);

return root;

}

提交答案:

看起來還不錯,明天我就去投穀歌了

leetcode 226 翻轉二叉樹

翻轉一棵二叉樹。示例 輸入 4 2 7 1 3 6 9輸出 4 7 2 9 6 3 1備註 這個問題是受到 max howell 的 原問題 啟發的 谷歌 我們90 的工程師使用您編寫的軟體 homebrew 但是您卻無法在面試時在白板上寫出翻轉二叉樹這道題,這太糟糕了。definition for...

LeetCode 226 翻轉二叉樹

這道題目是一道很經典的關於二叉樹的演算法題,題目如下 題目的描述非常簡單,就是翻轉一棵給定的二叉樹,然而有趣的是這個備註,這個故事是 mac 系統的包管理工具 homebrew 的開發者 max howell 去谷歌面試的時候沒有做出這道面試題而遭淘汰了,所以這道題目也是引發血案的一道二叉樹題目。其...

leetcode226 翻轉二叉樹

翻轉一棵二叉樹。示例 輸入 4 2 7 1 3 6 9 輸出 4 7 2 9 6 3 1 思路 有關樹的問題要想到遞迴,遞迴的想法很簡單,將根的左右子樹互換之後,再已左右子樹為根繼續互換。遞迴最重要的就是終止條件,如果傳入的是空指標,或者葉節點,那麼不需要再遞迴了,直接返回根節點。需要注意的是,在子...