《Leedcode》101 對稱二叉樹

2021-10-06 16:57:11 字數 2050 閱讀 7316

給定乙個二叉樹,檢查它是否是映象對稱的。

例如,二叉樹[1,2,2,3,4,4,3]是對稱的。

1

/ \2 2

/ \ / \

3 4 4 3

但是下面這個[1,2,2,null,3,null,3]則不是映象對稱的:

1

/ \2 2

\ \

3 3

思路:關於樹的問題,盡量用遞迴的思想去解決。因為樹的定義也是遞迴定義的。何為映象對稱呢?就是這個樹的左子樹和右子樹的節點都是對稱的。①遞迴法:因此可以把這個樹copy乙份,變成兩個樹,然後觀察這兩個樹的左子樹和右子樹是不是對稱的,也就是右子樹的左節點等於左子樹的右節點,這樣遞迴的判斷下去。最終就可以判斷出來這棵樹是不是映象對稱。②迭代法:總體思路和遞迴相差不是太大,定義乙個佇列,然後一次加入一對節點,然後去判斷節點的值是不是相同。

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution:

#定義乙個遞迴函式判斷左右子樹是不是鏡面對稱

def issymmetricjudge(self,left,right):

#如果左右子樹都是空的,那麼就是鏡面對稱

if left is none and right is none:

return true

#如果左右子樹有乙個子樹是空,另乙個非空,那肯定不是鏡面對稱

if left is none or right is none:

return false

#接下來就詳細的判斷,節點的值必須相同,且遞迴的判斷左節點的左和右節點的右;

#左節點的右和右節點的左相等

return left.val==right.val and self.issymmetricjudge(left.left,right.right) and self.issymmetricjudge(left.right,right.left)

def issymmetric(self, root: treenode) -> bool:

#如果樹為空,就是對稱樹

if not root:

return true

else:

return self.issymmetricjudge(root,root)

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution:

def issymmetric(self, root: treenode) -> bool:

#定義乙個佇列

queue = collections.deque()

#加入一對根節點

while queue:

#從佇列中取出元素

left, right = queue.popleft()

if not left and not right:

continue

if not left or not right:

return false

if left.val != right.val:

return false

#加入左子樹的左節點和右子樹的右節點

#加入右子樹的左節點和左子樹的右節點

return true

101 對稱二叉樹

給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。1 2 2 3 4 4 3但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 1 2 2 3 3說明 如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。思路 遞迴就用dfs,迭代是b...

101 對稱二叉樹

給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。1 2 2 3 4 4 3 但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 1 2 2 3 3說明 如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。解題思路 對稱二叉樹可以理解...

101 對稱二叉樹

給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。1 2 2 3 4 4 3 但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 1 2 2 3 3 說明 如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。使用輔助空間佇列 defi...