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