Symmetric Tree

来源:互联网 发布:淘宝店信誉级别 编辑:程序博客网 时间:2024/06/01 07:42

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.

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

解法一:非递归形式

/** * 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;        }else if(root->left == NULL && root->right == NULL){            return true;        }else{            queue<TreeNode*> lTree;            queue<TreeNode*> rTree;                        if(isSame(root->left,root->right)){                lTree.push(root->left);                rTree.push(root->right);            }else{                return false;            }                        while(!lTree.empty() && !rTree.empty()){                TreeNode* lfront = lTree.front();                TreeNode* rfront = rTree.front();                                lTree.pop();                rTree.pop();                                if(!isSame(lfront->right,rfront->left)){                    return false;                }                                if(lfront->right!=NULL && rfront->left!=NULL){                    lTree.push(lfront->right);                    rTree.push(rfront->left);                }                                if(!isSame(lfront->left,rfront->right)){                    return false;                }                                if(lfront->left!=NULL && rfront->right!=NULL){                    lTree.push(lfront->left);                    rTree.push(rfront->right);                }            }            return true;        }    }        bool isSame(TreeNode* a,TreeNode* b){        if(a == NULL && b == NULL){            return true;        }else if(a != NULL && b == NULL){            return false;        }else if(a == NULL && b != NULL){            return false;        }else{            if(a->val == b->val){                return true;            }else{                return false;            }        }    }   };

解法二:递归形式

/** * 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;        }else{            return isSame(root->left,root->right);        }    }        bool isSame(TreeNode* a,TreeNode* b){        if(a == NULL && b == NULL){            return true;        }else if(a != NULL && b == NULL){            return false;        }else if(a == NULL && b != NULL){            return false;        }else{            if(a->val == b->val){                return isSame(a->right,b->left) && isSame(a->left,b->right);            }else{                return false;            }        }    }};


0 0
原创粉丝点击