leetcode 101 對稱二叉樹

2021-10-06 16:17:45 字數 1240 閱讀 4156

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

遞迴的難點在於:找到可以遞迴的點 為什麼很多人覺得遞迴一看就會,一寫就廢。 或者說是自己寫無法寫出來,關鍵就是你對遞迴理解的深不深。

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

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

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

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

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

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

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

實現完畢。。。

寫著寫著。。。你就發現你寫出來了。。。。。。

#include using namespace std;

struct treenode

};bool issymmetric(treenode* root)

else

}bool treejudge(treenode* l, treenode *r)

if((l == null && r != null) || (l != null && r == null))

if(l -> val == r -> val &&(treejudge(l -> left, r -> right)) && (treejudge(l -> right, r -> left)))

else

}int main()

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