題目:
給定一個二叉樹,檢查它是否是鏡像對稱的。
例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。
但是下面這個 [1,2,2,null,3,null,3] 則不是鏡像對稱的:
說明
如果你可以運用遞歸和迭代兩種方法解決這個問題,會很加分。
算法實現
將這棵樹分成左子樹和右子樹,然後分別前序遍歷,左邊先遍歷左節點,右邊先遍歷右節點,轉化成相同的兩棵樹問題
和BFS的區別就是BFS會消耗更多空間,當兩棵樹不對稱的位置在內層靠上的話BFS會快點,但是如果不對稱位置在底層靠外的話前序遍歷會快點
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if (!root) return true;
TreeNode* left = root->left;
TreeNode* right = root->right;
return Symmetry(left, right);
}
bool Symmetry(TreeNode* left, TreeNode* right) {
if (!left && !right)
return true;
else if (!left || !right)
return false;
bool match = right->val == left->val;
return (match && Symmetry(right->right, left->left)) && (match && Symmetry(right->left, left->right));
}
};