(LeetCode 101) Symmetric Tree

来源:互联网 发布:面试淘宝运营技巧 编辑:程序博客网 时间:2024/06/06 15:39

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 

题意就是问一个二叉树是不是对称的。

solution:
直接使用广度搜索就可以解决了
迭代,我觉得,我的代码好像,有点长…
后面有彩蛋(递归版)

class Solution {public:    queue<TreeNode> pleft;    queue<TreeNode> pright;    bool isSymmetric(TreeNode* root) {        if(root==NULL)return true;        pleft.push(*root);        pright.push(*root);        while(!pleft.empty()||!pright.empty()){            TreeNode tempLeft = pleft.front();            TreeNode tempRight = pright.front();            pleft.pop();            pright.pop();            TreeNode *Lleft =tempLeft.left;            TreeNode *Lright = tempLeft.right;            TreeNode *Rleft = tempRight.left;            TreeNode *Rright = tempRight.right;            if((Lleft!=NULL&&Rright==NULL)||(Lleft==NULL&&Rright!=NULL))return false;            if((Lright!=NULL&&Rleft==NULL)||(Lright==NULL&&Rleft!=NULL))return false;            if(Lleft!=NULL){                if(Lleft->val!=Rright->val)return false;                pleft.push(*Lleft);                pright.push(*Rright);            }            if(Lright!=NULL){                if(Lright->val!=Rleft->val)return false;                pleft.push(*Lright);                pright.push(*Rleft);            }        }        if(pleft.empty()&&pright.empty())return true;        return false;    }};

翻到这里看的都是好孩子

class Solution {public:    bool isSymmetric(TreeNode* root) {        if(root==NULL)return true;        return test(root->left,root->right);    }    bool test(TreeNode *left,TreeNode *right){        if(left==NULL&&right==NULL)return true;        if(left!=NULL&&right!=NULL&&left->val==right->val){            return test(left->left,right->right)&&test(left->right,right->left);        }else return false;    }};
1 0