LeetCode第101題(對稱二叉樹)
阿新 • • 發佈:2019-02-16
原題如下:
給定一個二叉樹,檢查它是否是映象對稱的。
例如,二叉樹 [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
說明:
如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。
這題還是很有意思的一道題,最開始的想法是把 root 的左子樹 按照 左結點,根結點,右結點 ,,root 的右子樹按照,右結點,根結點,左結點,的方式各遍歷到一個數組裡去,他們應該是完全一樣的。。。
但是 可惜的是 完全一樣的陣列 並不能說明 他們是映象的
比如 :
1
/ \
2 3
/ /
3 2
他們的遍歷結果都為 -1,3,-1,2,-1(-1 代表為null)
應該在保證根結點(相對於左子樹 和 右子樹而言)的val相同的情況下,讓 左邊的root->left (right) 等於 右邊的 root->right(left) 依次類推
程式碼如下:
bool digui(TreeNode* root1, TreeNode *root2){ if (root1 && root2){ if (root1->val != root2->val) return false; else { bool x = digui(root1->left, root2->right); bool y = digui(root1->right, root2->left); return x&&y; } } else if (root1 == NULL&&root2 == NULL)return true; else return false; } bool isSymmetric(TreeNode* root) { if (root) return digui(root->left, root->right); else return true; }