判断二叉树是否对称

class Solution {
public:
    /*
    对于一颗二叉树,从根节点开始遍历
    如果左右节点有一个为NULL,那么肯定不是对称二叉树
    如果左右子节点均不为空,但不相等,那么肯定不是对称二叉树
    如果左右子节点均不为空且相等,那么:
        遍历左子树,遍历顺序为,当前节点,左子树,右子树
        遍历右子树,遍历顺序为,当前节点,右子树,左子树
    如果遍历左子树的序列和遍历右子树的序列一样,则称该二叉树为对称二叉树

    */
    bool isSymmetrical(TreeNode* pRoot)
    {
        if(pRoot==NULL)
            return true;
        return isMirror(pRoot->left,pRoot->right);
    }

    bool isMirror(TreeNode *pLeft,TreeNode *pRight){
        if(pLeft==NULL&&pRight==NULL)
            return true;
        if(pLeft==NULL||pRight==NULL)
            return false;
        if(pLeft->val!=pRight->val)
            return false;
        return isMirror(pLeft->left,pRight->right)&&isMirror(pLeft->right,pRight->left);
    }

};
class Solution {
public:
    /*
    对于一颗二叉树,从根节点开始遍历
    如果左右节点有一个为NULL,那么肯定不是对称二叉树
    如果左右子节点均不为空,但不相等,那么肯定不是对称二叉树
    如果左右子节点均不为空且相等,那么:
        遍历左子树,遍历顺序为,当前节点,左子树,右子树
        遍历右子树,遍历顺序为,当前节点,右子树,左子树
    如果遍历左子树的序列和遍历右子树的序列一样,则称该二叉树为对称二叉树

    */
    bool isSymmetrical(TreeNode* pRoot)
    {
        if(pRoot==NULL)
            return true;
        return isMirror(pRoot->left,pRoot->right);
    }

    bool isMirror(TreeNode *pLeft,TreeNode *pRight){
        if(pLeft==NULL&&pRight==NULL)
            return true;
        if(pLeft==NULL||pRight==NULL)
            return false;
        if(pLeft->val!=pRight->val)
            return false;
        return isMirror(pLeft->left,pRight->right)&&isMirror(pLeft->right,pRight->left);
    }

};

 

posted @ 2017-09-18 10:23  bananaa  阅读(597)  评论(0)    收藏  举报