leetcode 101 對稱二叉樹

2021-10-19 08:52:22 字數 3677 閱讀 3388

題目鏈結

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

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

1

/ \ 2

2/ \ / \34

43

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

1

/ \ 2

2 \ \33

高階:你可以運用遞迴和迭代兩種方法解決這個問題嗎?

比較推薦方法二和方法三

python解法

利用層序遍歷的方式,把每層的節點都放入到tmp中,不存在的節點用none去代替。

如果該層全有結點的逆序和原來相同,那麼就是對稱的。

# definition for a binary tree node.

# class treenode:

# def __init__(self, val=0, left=none, right=none):

# self.val = val

# self.left = left

# self.right = right

class

solution

:def

issymmetric

(self, root: treenode)

->

bool:if

not root:

return

true

queue =

[root]

while queue:

tmp =

l =len(queue)

for _ in

range

(l):

cur = queue.pop(0)

left,right = cur.left,cur.right

if left:

else

:none

)if right:

else

:none

)if tmp!=tmp[::

-1]:

return

false

return

true

c++解法c++中並不能使用null,因為c++中的null就是0,如果節點的值也為0就會出錯。

python解法

# definition for a binary tree node.

# class treenode:

# def __init__(self, val=0, left=none, right=none):

# self.val = val

# self.left = left

# self.right = right

class

solution

:def

issymmetric

(self, root: treenode)

->

bool:if

not root:

return

true

defdfs

(left,right):if

not(left or right)

:return

true

ifnot

(left and right)

:return

false

if left.val!=right.val:

return

false

return dfs(left.left,right.right)

and dfs(left.right,right.left)

return dfs(root.left,root.right)

c++解法

class

solution

bool

issymmetric

(treenode* root)

};

這種寫法,直接在queue中放入root.left,root.right,是因為判斷對稱,不用考慮頭節點

python解法

class

solution

(object):

defissymmetric

(self, root)

:"""

:type root: treenode

:rtype: bool

"""ifnot root or

not(root.left or root.right)

:return

true

# 用佇列儲存節點

queue =

[root.left,root.right]

while queue:

# 從佇列中取出兩個節點,再比較這兩個節點

left = queue.pop(0)

right = queue.pop(0)

# 如果兩個節點都為空就繼續迴圈,兩者有乙個為空就返回false

ifnot

(left or right)

:continue

ifnot

(left and right)

:return

false

if left.val!=right.val:

return

false

# 將左節點的左孩子, 右節點的右孩子放入佇列

# 將左節點的右孩子,右節點的左孩子放入佇列

return

true

c++解法

class

solution

return

true;}

};

LeetCode 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 說明 如果你可以遞迴地和迭代地解決它就獎勵你點數。建立乙個映象的樹,然...

LeetCode(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說明 如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。這道題也是劍指offer上的2...

leetcode 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思路 如果同時滿足下面的條件,兩個樹互為映象 它們的兩個根結點具有相同的值。每個樹的右子樹都...