给你一个二叉树的根节点 root
, 检查它是否轴对称。
void exchange(struct TreeNode** pleft,struct TreeNode** pright)
{
struct TreeNode* tmp = *pleft;
*pleft = *pright;
*pright = tmp;
}
struct TreeNode* invertTree(struct TreeNode* root){
if (root == NULL)
{
return root;
}
if (root->right == NULL && root->left == NULL)
{
return root;
}
if (root->right && root->left)
{
exchange(&root->right , &root->left);
invertTree(root->left);
invertTree(root->right);
return root;
}
if (root->left == NULL && root->right)
{
root->left = root->right;
root->right = NULL;
invertTree(root->left);
return root;
}
if (root->right == NULL && root->left)
{
root->right = root->left;
root->left = NULL;
invertTree(root->right);
//return root;
}
return root;
}
bool isSameTree(struct TreeNode* p, struct TreeNode* q){
if (p == NULL && q == NULL)
{
return true;
}
if (p == NULL && q != NULL)
{
return false;
}
if (p != NULL && q == NULL)
{
return false;
}
if (p->val != q->val)
{
return false;
}
return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}
bool isSymmetric(struct TreeNode* root){
if (root == NULL)
{
return true;
}
struct TreeNode* left = root->left;
struct TreeNode* right = root->right;
invertTree(right);
return isSameTree(left,right);
}