剑指offer-58.对称的二叉树

来源:互联网 发布:知行至善是什么意思 编辑:程序博客网 时间:2024/05/14 13:27

题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。


思路:递归,只需判断左子树和右子树是否镜像就行,(即左子树的右子树和右子树的左子树,还有左子树的左子树和右子树的右子树)


/*struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode(int x) :            val(x), left(NULL), right(NULL) {    }};*/class Solution {public:    //对的,你没有猜错,该辅助函数是判断左子树和右子树是否对称,对的,你也没有猜错,还漏了根节点的判断是把?不是,一个根节点就    //不存在什么对称问题了    bool Issame(TreeNode* p1, TreeNode* p2)    {        if (p1 != NULL && p2 == NULL)            return false;        else if (p1 == NULL && p2 != NULL)            return false;        else if (p1 == NULL && p2 == NULL)            return true;        else if (p1->val == p2->val)            return Issame(p1->right, p2->left) && Issame(p1->left, p2->right); //镜像对称        else            return false;    }    bool isSymmetrical(TreeNode* pRoot)    {        if(pRoot == NULL)            return true;        else            return Issame(pRoot->left, pRoot->right);        }};


0 0
原创粉丝点击