翻轉一棵二叉樹。
示例:輸入:
輸出:
翻轉一顆空樹還是空樹,因此,對於每乙個節點,分別翻轉它的子樹,把該節點的左右子樹交換,遞迴的翻轉所有節點。
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
treenode* left =
inverttree
(root-
>left)
; treenode* right =
inverttree
(root-
>right)
; root-
>left = right;
root-
>right = left;
return root;}}
;
時間複雜度:o(n)
空間複雜度:o(n)
利用佇列,
(1)把根節點放入佇列中。
(2)交換根節點的左右子節點,如果左右子節點不為空,則入隊。
(3)把佇列頭部的節點出隊,交換左右子節點,如果該節點的左右子節點不為空,則入隊。
(4)重複(3)直到隊列為空。
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
queue
> q;
q.push
(root)
;while
(!q.
empty()
)if(node-
>right)
}return root;}}
;
時間複雜度:o(n)
空間複雜度:o(n)
226 翻轉二叉樹
翻轉一棵二叉樹。示例 輸入 4 2 7 1 3 6 9 輸出 4 7 2 9 6 3 1 備註 這個問題是受到 max howell 的 原問題 啟發的 谷歌 我們90 的工程師使用您編寫的軟體 homebrew 但是您卻無法在面試時在白板上寫出翻轉二叉樹這道題,這太糟糕了。class soluti...
226 翻轉二叉樹
解題思路 看到題目就會想到要左右節點交換,但是糾結了很久的問題是在遞迴左右節點時要不要判斷左右節點為空,後來看了別人的解題思路想到了,其實不用判斷,不管是否為空都要左右節點交換。至於root為空時,root.left是否合理的問題,更不用考慮了,因為root.left是通過別的值儲存起來的,且roo...
226 翻轉二叉樹
翻轉一棵二叉樹。示例 輸入 4 2 7 1 3 6 9 輸出 4 7 2 9 6 3 1 備註 這個問題是受到 max howell 的 原問題 啟發的 谷歌 我們90 的工程師使用您編寫的軟體 homebrew 但是您卻無法在面試時在白板上寫出翻轉二叉樹這道題,這太糟糕了。definition f...