目录
题目
给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true
思路
需要注意的是,题目中要求的是“轴对称”
只需让左树的left孩子 == 右树的right孩子即可
代码
bool _isSymmetric(struct TreeNode* left, struct TreeNode* right)
{
if (left == NULL && right == NULL)
return true;
//此时至少一个不为空
if (left == NULL || right == NULL)
return false;
//此时left 与 right 都不为空
if (left->val != right->val)
return false;
return _isSymmetric(left->left, right->right)
&& _isSymmetric(left->right,right->left);
}
bool isSymmetric(struct TreeNode* root) { //函数不符合需求,生成子函数解决问题。
return _isSymmetric(root->left, root->right); //用子函数的返回值,作为返回值
}
注意点:
1.
bool isSymmetric(struct TreeNode* root);
由于主函数只有一个参数,不能满足左树与右树,同时进入递归比较,所以额外写一个子函数
bool _isSymmetric(struct TreeNode* left, struct TreeNode* right);
让左右孩子作为参数,去不断比较
2.
return _isSymmetric(left->left, right->right)
&& _isSymmetric(left->right,right->left);
需要注意的是,需要让左树的左孩子和右树的有孩子比较,相同才是轴对称!