在上一个节点的基础上比较子节点,分析可知需要用到递归,首先分析局部:抓住两个节点,比较二叉树是否对称需要满足:1.这两个节点值相同2.其中一个节点的左节点等于另一个节点的右节点,其中一个节点的右节点等于另一个节点的左节点。再分析全局:递归的终止条件为节点为空,所以前面先要判断该节点是否为空节点,再递归判断是否空子节点是否空节点
class Solution {
public:
bool check(TreeNode *p, TreeNode *q) {
if (!p && !q) return true;
if (!p || !q) return false;//先要判断该节点是否为空节点,一个是空还是两个都空
return p->val == q->val && check(p->left, q->right) && check(p->right, q->left);//递归判断是否空子节点是否空节点
}
bool isSymmetric(TreeNode* root) {//放入根节点,看成两棵树去做
return check(root, root);
}
};