101 對稱二叉樹

2021-10-22 03:16:26 字數 1411 閱讀 5258

遞迴,想法是,如果當前點的值一樣,且當前點的左子節點.val = 右子節點.val就行。

# 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

:def

helper

(left, right):if

not left and

not right:

return

true

elif

not left or

not right:

return

false

if left.val != right.val:

return

false

return helper(left.left, right.right)

and helper(left.right, right.left)

return helper(root, root)

對於此題: 遞迴的點怎麼找?從拿到題的第一時間開始,思路如下:

1.怎麼判斷一棵樹是不是對稱二叉樹? 答案:如果所給根節點,為空,那麼是對稱。如果不為空的話,當他的左子樹與右子樹對稱時,他對稱

2.那麼怎麼知道左子樹與右子樹對不對稱呢?在這我直接叫為左樹和右樹 答案:如果左樹的左孩子與右樹的右孩子對稱,左樹的右孩子與右樹的左孩子對稱,那麼這個左樹和右樹就對稱。

仔細讀這句話,是不是有點繞?怎麼感覺有乙個功能a我想實現,但我去實現a的時候又要用到a實現後的功能呢?

當你思考到這裡的時候,遞迴點已經出現了: 遞迴點:我在嘗試判斷左樹與右樹對稱的條件時,發現其跟兩樹的孩子的對稱情況有關係。

想到這裡,你不必有太多疑問,上手去按思路寫**,函式a(左樹,右樹)功能是返回是否對稱

def 函式a(左樹,右樹): 左樹節點值等於右樹節點值 且 函式a(左樹的左子樹,右樹的右子樹),函式a(左樹的右子樹,右樹的左子樹)均為真 才返回真

實現完畢。

如果乙個樹的左子樹與右子樹映象對稱,那麼這個樹是對稱的。

因此,該問題可以轉化為:兩個樹在什麼情況下互為映象?

如果同時滿足下面的條件,兩個樹互為映象:

它們的兩個根結點具有相同的值

每個樹的右子樹都與另乙個樹的左子樹映象對稱

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