【leetcode 刷題日記】20-對稱二叉樹(C++)

對稱二叉樹

題目

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

示例

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

思路

什麼是鏡像對稱的二叉樹?

如果一個樹的左子樹與右子樹鏡像對稱,那麼這個樹是對稱的。

那麼鏡像對稱的二叉樹該滿足什麼條件?

樹結點的左子樹和右子樹相等

這樣就很容易想到遞歸的解法

代碼

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
 bool ismirrow(TreeNode *r1,TreeNode *r2)
{
     if(r1==NULL&&r2==NULL)
        return true;
     if(r1==NULL||r2==NULL)
        return false;
     return (r1->val==r2->val&&ismirrow(r1->left,r2->right)&&ismirrow(r1->right,r2->left));
}
class Solution {
public:
    bool isSymmetric(TreeNode* root) 
    {
       return ismirrow(root,root);  
    }
};


在這裏插入圖片描述

時間複雜度是O(n),即遍歷所有節點

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