递归判断一下
节点如下:
a
b c
d e f g
a的左子树值要等于a的右子树c
b的左子树要等于c的子树 b的右子树要等于c的左子树
以此循环下去
函数如下:
bool check(TreeNode * left,TreeNode * right)
{
//左右都为空可以判为对称,左右单个为空肯定就不对称了,都不为空就回调
if(left == nullptr )
{
if(right == nullptr)
return true;
else
return false;
}
else{
if(right == nullptr)
return false;
}
if(left->val==right->val)
return(check(left->left,right->right)&&check(left->right, right->left));
else
return false;
}完整代码
class Solution {
public:
bool check(TreeNode * left,TreeNode * right)
{
//左右都为空可以判为对称,左右单个为空肯定就不对称了,都不为空就回调
if(left == nullptr )
{
if(right == nullptr)
return true;
else
return false;
}
else{
if(right == nullptr)
return false;
}
if(left->val==right->val)
return(check(left->left,right->right)&&check(left->right, right->left));
else
return false;
}
bool isSymmetrical(TreeNode* pRoot) {
if(pRoot == nullptr)
return true;
TreeNode * left=pRoot->left;
TreeNode * right=pRoot->right;
return check(left, right);
}
};
京公网安备 11010502036488号