【LeetCode 簡單題】60-翻轉二叉樹
阿新 • • 發佈:2018-11-04
宣告:
今天是第60道題。翻轉一棵二叉樹。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除
(手動比心ღ( ´・ᴗ・` ))
正文
題目:翻轉一棵二叉樹。
示例:
輸入:
4 / \ 2 7 / \ / \ 1 3 6 9
輸出:
4 / \ 7 2 / \ / \ 9 6 3 1
備註:
這個問題是受到 Max Howell 的 原問題 啟發的 :
谷歌:我們90%的工程師使用您編寫的軟體(Homebrew),但是您卻無法在面試時在白板上寫出翻轉二叉樹這道題,這太糟糕了。
解法1。用遞迴的方法,先交換左右子節點的值,然後遞迴呼叫,交換左右子節點的值,直到遍歷到空節點後返回。
執行用時: 24 ms, 在Invert Binary Tree的Python提交中擊敗了99.83% 的使用者。
# 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 not root: return # 交換左右節點的值 tmp = root.left root.left = root.right root.right = tmp # 交換完了當前節點的左右節點的值後,遞迴交換子節點的左右子節點的值 self.invertTree(root.left) self.invertTree(root.right) # 交換完了,返回翻轉後的二叉樹 return root
解法2。有比解法1更簡潔的寫法,具體啥意思我也沒看懂。。。
執行用時: 24 ms, 在Invert Binary Tree的Python提交中擊敗了99.83% 的使用者。
class Solution(object): def invertTree(self, root): """ :type root: TreeNode :rtype: TreeNode """ if root: root.left, root.right = self.invertTree(root.right), self.invertTree(root.left) return root
解法3。還有非遞迴的方法
執行用時: 24 ms, 在Invert Binary Tree的Python提交中擊敗了99.83% 的使用者。
class Solution(object):
def invertTree(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""
stack = [root]
while stack:
node = stack.pop()
if node:
node.left, node.right = node.right, node.left
stack += node.left, node.right
return root
結尾
解法1:LeetCode
解法2:https://blog.csdn.net/qq_34364995/article/details/80640477?utm_source=blogxgwz0
解法3:https://blog.csdn.net/wangyaninglm/article/details/46612367