226. 翻轉二叉樹
翻轉一棵二叉樹。
示例:輸入:
4
/ \
2 7
/ \ / \
1 3 6 9
輸出:
4
/ \
7 2
/ \ / \
9 6 3 1
翻轉的效果為:二叉樹每個節點的左右子節點進行交換。
實現上可分為前序遍歷和後序遍歷兩種:
前序遍歷是先交換左右節點,再對左右子節點進行遞迴。
後續遍歷是一直遞迴到葉子節點,然後再從下往上交換。
# definition for a binary tree node.
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class
solution
:def
inverttree
(self, root: treenode)
-> treenode:
# 二叉樹的後序遍歷
# 當前節點為空是返回,否則左右子樹交換位置
ifnot root:
return
none
left = self.inverttree(root.left)
right = self.inverttree(root.right)
root.left, root.right = right, left
return root
definverttree1
(self, root: treenode)
-> treenode:
# 二叉樹的前序遍歷
# 當前節點為空是返回,否則左右子樹交換位置
ifnot root:
return
none
# tmp = root.left
# root.left = root.right
# root.right = tmp
root.left, root.right = root.right, root.left
self.inverttree(root.left)
self.inverttree(root.right)
return root # 第一次錯誤:未寫此處
參考:labuladong
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 翻轉二叉樹
翻轉一棵二叉樹。示例 輸入 輸出 翻轉一顆空樹還是空樹,因此,對於每乙個節點,分別翻轉它的子樹,把該節點的左右子樹交換,遞迴的翻轉所有節點。definition for a binary tree node.struct treenode class solution treenode left i...