题目:
解题代码:
实际上就是通过写一个递归函数,然后遵循一个规律:
左子树的左节点和右子树的右节点值相等,左子树的右节点和右子树的左节点相等。
class Solution {
public:
//递归时由于要同时判断左右两边的子树,所以应该传参left和right子树。
//即利用两个传参对左右子树同时操作
bool isSymmetric(TreeNode* root) {
if(root==nullptr)
return true;
return isSymmetry(root->left,root->right);
}
private:
//构造传参left和right两个指针的函数用于判断左右子树两边。
//实际为从上到下的先序遍历
bool isSymmetry(TreeNode* left,TreeNode* right){
//若根节点无左右子树,则为对称二叉树
if(left==nullptr&&right==nullptr)
return true;
//若这两个结点有一个为空,或者两者的值不同则return false.
if(left==nullptr||right==nullptr||left->val!=right->val)
return false;
//1.对左子树的左子结点和右子树的右子节点进行判断
//2.对左子树的右子结点和右子树的左子节点进行判断
return isSymmetry(left->left,right->right)&&isSymmetry(left->right,right->left);
}
};