這是一道很經典的二叉樹問題。顯然,我們從根節點開始,遞迴地對樹進行遍歷,並從葉子結點先開始翻轉。如果當前遍歷到的節點 root 的左右兩棵子樹都已經翻轉,那麼我們只需要交換兩棵子樹的位置,即可完成以 root 為根節點的整棵子樹的翻轉。
class
solution
//從根節點開始,遞迴地對樹進行遍歷,並從葉子結點先開始翻轉
treenode* left =
inverttree
(root-
>left)
; treenode* right =
inverttree
(root-
>right)
;//當最底層子節點時,對調該結點的左右子節點
root-
>left = right;
root-
>right = left;
return root;}}
;
複雜度分析時間複雜度:o(n),其中 n 為二叉樹節點的數目。我們會遍歷二叉樹中的每乙個節點,對每個節點而言,我們在常數時間內交換其兩棵子樹。
空間複雜度:o(n)。使用的空間由遞迴棧的深度決定,它等於當前節點在二叉樹中的高度。在平均情況下,二叉樹的高度與節點個數為對數關係,即 o(logn)。而在最壞情況下,樹形成鏈狀,空間複雜度為 o(n)。
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 思路 有關樹的問題要想到遞迴,遞迴的想法很簡單,將根的左右子樹互換之後,再已左右子樹為根繼續互換。遞迴最重要的就是終止條件,如果傳入的是空指標,或者葉節點,那麼不需要再遞迴了,直接返回根節點。需要注意的是,在子...