LeetCode226 翻轉二叉樹

2021-10-09 12:10:39 字數 3330 閱讀 2795

目錄

一、題目

二、示例

三、思路

四、**

翻轉一棵二叉樹。

輸入:

4/   \

2     7

/  \   /  \

1   3 6   9

輸出:4

/   \

7     2

/  \   /  \

9   6 3   1

備註:

這個問題是受到 max howell 的 原問題 啟發的 :

谷歌:我們90%的工程師使用您編寫的軟體(homebrew),但是您卻無法在面試時在白板上寫出翻轉二叉樹這道題,這太糟糕了。

1、先序遍歷交換左右子樹

2、中序遍歷交換左右子樹

3、後序遍歷交換左右子樹

1、方法1

class treenode:

def __init__(self, x):

self.val = x

self.left = none

self.right = none

class solution:

def inverttree(self, root: treenode) -> treenode:

""":type root: treenode

:rtype: treenode

"""# 先序

def inverse1(root):

if root is none:

return

tmp = root.left

root.left = root.right

root.right = tmp

inverse1(root.left)

inverse1(root.right)

inverse1(root)

return root

if __name__ == '__main__':

root = treenode(4)

root.left = treenode(2)

root.right = treenode(7)

root.left.left = treenode(1)

root.left.right = treenode(3)

root.right.left = treenode(6)

root.right.right = treenode(9)

s = solution()

new_tree = s.inverttree(root)

print(new_tree.val, new_tree.left.val, new_tree.right.val)

2、方法2

class treenode:

def __init__(self, x):

self.val = x

self.left = none

self.right = none

class solution:

def inverttree(self, root: treenode) -> treenode:

""":type root: treenode

:rtype: treenode

"""# 中序

def inverse2(root):

if root is none:

return

inverse2(root.left)

tmp = root.left

root.left = root.right

root.right = tmp

inverse2(root.left)

inverse2(root)

return root

if __name__ == '__main__':

root = treenode(4)

root.left = treenode(2)

root.right = treenode(7)

root.left.left = treenode(1)

root.left.right = treenode(3)

root.right.left = treenode(6)

root.right.right = treenode(9)

s = solution()

new_tree = s.inverttree(root)

print(new_tree.val, new_tree.left.val, new_tree.right.val)

3、方法3

class treenode:

def __init__(self, x):

self.val = x

self.left = none

self.right = none

class solution:

def inverttree(self, root: treenode) -> treenode:

""":type root: treenode

:rtype: treenode

"""# 後序

def inverse(root):

if not root:

return

inverse(root.left)

inverse(root.right)

tmp = root.right

root.right = root.left

root.left = tmp

inverse(root)

return root

if __name__ == '__main__':

root = treenode(4)

root.left = treenode(2)

root.right = treenode(7)

root.left.left = treenode(1)

root.left.right = treenode(3)

root.right.left = treenode(6)

root.right.right = treenode(9)

s = solution()

new_tree = s.inverttree(root)

print(new_tree.val, new_tree.left.val, new_tree.right.val)

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 思路 有關樹的問題要想到遞迴,遞迴的想法很簡單,將根的左右子樹互換之後,再已左右子樹為根繼續互換。遞迴最重要的就是終止條件,如果傳入的是空指標,或者葉節點,那麼不需要再遞迴了,直接返回根節點。需要注意的是,在子...