题目链接:101. 对称二叉树 - 力扣(LeetCode)
解题思路:
判断一棵树是对称二叉树的条件:左右子树镜像对称
那么如何判断左右子树是镜像对称呢?
1、两棵树根节点相同
2、每棵树的左子树和另一棵树的右子树镜像对称
将大问题(判断左右子树是否镜像对称?)拆解成了小问题(根节点相同+左子树和右子树镜像对称)
因此可使用递归求解,使用两个指针pl和pr分别指向左右子树,当pl左移时,pr右移,这样pl和pr在树中始终处于镜像对称的位置,判断这两个位置的值是否相同就可以求解
递归终止条件
1、两个指针为空,返回true
1、两个指针中,只有一个为空,返回false
class Solution {
public:
bool _isSymmetric(TreeNode* pl, TreeNode* pr){
if(!pl && !pr)
return true;
if(!pl || !pr)
return false;
return (pl->val == pr->val) &&
_isSymmetric(pl->left, pr->right) &&
_isSymmetric(pr->left, pl->right);
}
bool isSymmetric(TreeNode* root) {
return _isSymmetric(root->left, root->right);
}
};