58、对称的二叉树

来源:互联网 发布:手机百度云网络失败 编辑:程序博客网 时间:2024/05/17 09:04

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

思路:如下图所示从左到右三棵二叉树
这里写图片描述
前序遍历方式是根->左->右,我们可以定义一种前序遍历的镜像遍历方式,根->右->左,如果按照这两种遍历方式得到的序列是一样的,说明对称,图1和2可以说明这一点。
然鹅图图三这样的结构,无论怎么遍历,得到的都是6个7,显然它是不对称的,并不能因此将它判定为对称。所以怎么办呢?只要我们把遍历二叉树时遇到的空指针也考虑进来,所以二叉树实际上如下图所示:
这里写图片描述

代码:

/*struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode(int x) :            val(x), left(NULL), right(NULL) {    }};*/class Solution {public:    bool isSymmetrical(TreeNode* pRoot)    {        return isSymmetricalCore(pRoot,pRoot);    }    bool isSymmetricalCore(TreeNode* pRoot1,TreeNode* pRoot2){        if(pRoot1==NULL && pRoot2==NULL)            return true;        if(pRoot1==NULL || pRoot2==NULL)            return false;        if(pRoot1->val!=pRoot2->val)            return false;        //pRoot1的左和pRoot2的右要相等,pRoot1的右和pRoot2的左要相等,才能做到对称        return isSymmetricalCore(pRoot1->left,pRoot2->right)             && isSymmetricalCore(pRoot1->right,pRoot2->left);    }};
原创粉丝点击