Leetcode實戰: 101. 對稱二叉樹

題目:

給定一個二叉樹,檢查它是否是鏡像對稱的。

例如,二叉樹 [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));
    }
};

結果:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章