思路:
1.递归遍历整个数组,对比左子树和右子树的值是否相同,全都相同就是对称
2.要满足对称,是左子树的左孩子节点和右子树的右孩子节点相同;左子树的右孩子节点和右子树的左孩子节点相同
3.判断左子树和右子树根节点是否为空,都为空代表相同,返回true;如果其中一个是空,另一个不是空,代表不相同,返回false
4.如果都非空,但是值不相同,返回false,如果值相同,就向下递归遍历继续比较
代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool _isSymmetric(struct TreeNode* p,struct TreeNode* q)
{
if(p==NULL&&q==NULL)//都为NULL,相同返回true
{
return true;
}
if(p==NULL||q==NULL)//只有一个为空,另一个非空,不相同,所以返回false
{
return false;
}
if(p->val != q->val)//p,q都不为空,但是他们对应的值不相等
{
return false;
}
else //p,q所对应的值相同,往下遍历
{
return _isSymmetric(p->left,q->right)
&& _isSymmetric(p->right,q->left);
}
}
bool isSymmetric(struct TreeNode* root) {
return _isSymmetric(root->left,root->right);
}