题目要求
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
思路
如果树为空,则对称,如果树只有一个根节点,则对称。如果左节点和对应的右节点均为空,那么是对称的,排除掉均为空,只要他两个节点有一个不为空,那么就不是对称的。或者如果左右的节点的值不一样,那么树也不对称。然后分别对树的左子树和右子树进行递归。
图解
代码实现
bool dfs(struct TreeNode* left, struct TreeNode* right)
{
if (left == NULL && right == NULL)
{
return true;
}
if (left == NULL || right == NULL)
{
return false;
}
if (left->val != right->val)
{
return false;
}
return dfs(left->left, right->right) && dfs(left->right, right->left);
}
bool isSymmetric(struct TreeNode* root){
if (root == NULL || (root->left == NULL && root->right == NULL))
{
return true;
}
return dfs(root->left, root->right);
}