LeetCode *** 101. Symmetric Tree

来源:互联网 发布:中云数据科技有限公司 编辑:程序博客网 时间:2024/04/29 23:21

题目:

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.


分析:

既然是镜面,那么直接翻转,然后查看翻转的树与原树是否一致。。我承认这个办法很low。。我先刷完这些题再说吧。。



代码:

/** * 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 isSymmetric(TreeNode* root) {        if(root==NULL)return true;                TreeNode *mirror=new TreeNode(root->val);                queue<TreeNode*> reTree;        queue<TreeNode*> reTreeMirror;                reTree.push(root);        reTreeMirror.push(mirror);                while(!reTree.empty()){            TreeNode* tmp=reTree.front();            reTree.pop();            TreeNode* tmpMirror=reTreeMirror.front();            reTreeMirror.pop();                        if(tmp->left){                tmpMirror->right=new TreeNode((tmp->left)->val);                reTree.push(tmp->left);                reTreeMirror.push(tmpMirror->right);            }            if(tmp->right){                tmpMirror->left=new TreeNode((tmp->right)->val);                reTree.push(tmp->right);                reTreeMirror.push(tmpMirror->left);            }        }                        queue<TreeNode*> cr;        queue<TreeNode*> cm;                cr.push(root);        cm.push(mirror);                while(!cr.empty()){            TreeNode* tmpR=cr.front();            TreeNode* tmpM=cm.front();            cr.pop();            cm.pop();                        if((tmpR->left==NULL&&tmpM->left!=NULL)||(tmpM->left==NULL&&tmpR->left!=NULL)||(tmpR->right==NULL&&tmpM->right!=NULL)||(tmpM->right==NULL&&tmpR->right!=NULL)||tmpR->val!=tmpM->val)return false;                        if(tmpR->left){                cr.push(tmpR->left);                cm.push(tmpM->left);            }            if(tmpR->right){                cr.push(tmpR->right);                cm.push(tmpM->right);            }        }                return true;    }};

0 0
原创粉丝点击