题目(力扣):
观察题目,只需判断该二叉树是否对称。
判断二叉树是否对称,就可以换位去判断该二叉树的左子树和右子树是否对称。
这时就可以写一个辅助函数来方便判断。
该函数是判断两颗树是否镜像对称,这时就会发现,我们需要的这个函数和判断两棵树是否相等非常相似,只需改变一些条件,(判断树是否相等是左节点的值等于另一棵树左节点的值,右节点的值等于另一棵树右节点的值而镜像则是相反,即左节点的值等于另一棵树右节点的值,右节点的值等于另一棵树左节点的值)
判断两树是否相等:
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
if (p == NULL && q == NULL)
return true;
else if (p == NULL
|| q == NULL)
return false;
else if (p->val != q->val)
return false;
else
return isSameTree(p->left, q->left)
&& isSameTree(p->right, q->right);
}
而判断两树是否镜像对称:
只有这两处地方有改变。
其余地方一直相同。
剩余的isSymmetric函数中就是简单的判断了
完整代码:
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
if (p == NULL && q == NULL)
return true;
else if (p == NULL
|| q == NULL)
return false;
else if (p->val != q->val)
return false;
else
return isSameTree(p->left, q->right)
&& isSameTree(p->right, q->left);
}
bool isSymmetric(struct TreeNode* root) {
if(!root)
return true;
if((!root->left && root->right)
|| (!root->right && root->left))
return false;
else if(root->left && root->right)
return isSameTree(root->left,root->right);
else
return true;
}
题目的提交: