101 對稱二叉樹

2021-10-01 11:38:54 字數 1501 閱讀 7118

我第乙個想到的是bfs,得到每一層的數值,再判斷是否是對稱的,但是這個複雜度很高。

可以從bfs的步驟進行乙個改變,因為要考察整個二叉樹是不是對稱的,隨意在bfs入佇列的時候我們可以讓節點對稱者入佇列,判斷相鄰的節點是不是數值相等的。

class solution(object):

def issymmetric(self, root):

""":type root: treenode

:rtype: bool

"""if not 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

if not (left or right):

continue

if not (left and right):

return false

if left.val!=right.val:

return false

# 需要注意的是,在這裡並沒有把乙個書遍歷兩次,而是用左右子樹拼接的方式完成對一整個樹的遍歷

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

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

return true

遞迴的方式:二叉樹得題很多都可以用遞迴的方式來解答。

class solution(object):

def issymmetric(self, root):

""":type root: treenode

:rtype: bool

"""if not root:

return true

def dfs(left,right):

# 遞迴的終止條件是兩個節點都為空

# 或者兩個節點中有乙個為空

# 或者兩個節點的值不相等

if not (left or right):

return true

if not (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)

他主要是dfs,同樣因為考慮對稱的問題,左子樹和右子樹和遍歷方式也應該是對稱的。判斷對應位置結點數值是否相等即可。

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...