Symmetric Tree

-----QUESTION-----

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree is symmetric:

 1 / \ 2 2 / \ / \ 3 4 4 3

 

But the following is not:

 1 / \ 2 2 \ \ 3 3

 

Note:
Bonus points if you could solve it both recursively and iteratively.

-----SOLUTION-----

class Solution {
public:
    bool isSymmetric(TreeNode *root) {
        if(!root) return true;
        
        bool result;
        if((root->left==NULL && root->right != NULL) ||(root->left!=NULL && root->right == NULL))
        {
            return false;
        }
        else if(root->left == NULL && root->right == NULL)
        {
            return true;
        }
        else
        {
            result = cmp(root->left, root->right);
        }      
    }
    bool cmp(TreeNode * node1, TreeNode* node2)
    {
        int result1 = true;
        int result2 = true;
        if(node1->val!=node2->val) return false;
        else
        {
            if((node1->left==NULL && node2->right != NULL) ||
            (node1->left!=NULL && node2->right == NULL)||
            (node1->right!=NULL && node2->left == NULL)||
            (node1->right==NULL && node2->left != NULL))
            {
                return false;
            }
            if((node1->left == NULL && node2->right == NULL)&&
            (node1->right == NULL && node2->left== NULL))
            {
                return true;
            }
            if(node1->left != NULL)
            {
                result1 = cmp(node1->left,node2->right);
            }
            if(node1->right != NULL)
            {
                result2 = cmp(node1->right,node2->left);
            } 
            return (result1 && result2);
        }
    }     
};

非递归方法

class Solution {
public:
    bool isSymmetric(TreeNode *root) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        if(root == NULL)    return true;
        queue<TreeNode*> q;
        q.push(root->left);
        q.push(root->right);
        TreeNode *t1, *t2;
        while(!q.empty()){
            t1 = q.front();
            q.pop();
            t2 = q.front();
            q.pop();
            if(t1 == NULL && t2 == NULL)
                continue;
            if(t1 == NULL || t2 == NULL || t1->val != t2->val)
                return false;
            q.push(t1->left);
            q.push(t2->right);
            q.push(t1->right);
            q.push(t2->left);
        }
        return true;
    }
};

你可能感兴趣的:(tree)