Leetcode66——對稱二叉樹

一個樹爲對稱的僅當兩棵子樹互爲鏡像,即要滿足:

1.子樹根節點值相等

2.每個樹的右子樹都與另一個樹的左子樹鏡像對稱。

有遞歸迭代兩種解法:

遞歸:

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

迭代:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    queue<TreeNode*>q;

    bool check(TreeNode* node1,TreeNode* node2)
    {
        //  if(node1==NULL)return true;
        q.push(node1);
        q.push(node2);
        while(!q.empty())
        {
            TreeNode* u=q.front();
            q.pop();
            TreeNode* v=q.front();
            q.pop();
            if(!u&&!v)continue;
            if(!u||!v||u->val!=v->val)
                return false;
            q.push(u->left);
            q.push(v->right);
            q.push(u->right);
            q.push(v->left);
        }
        return true;
    }
    bool isSymmetric(TreeNode* root) {
        return check(root,root);
        
    }
};

 

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