主页有其他数据结构内容(持续更新中)
难度:Easy
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
private:
bool check(TreeNode *p, TreeNode *q) {
if (p == nullptr && q == nullptr) {
return true;
}
if (p == nullptr || q == nullptr) {
// 由于左右节点都为空的情况已经判断过了,所以只要能进这个判断语句,左右节点里至少有一个非空
return false;
}
// 递归+双指针策略:p右移时,q左移;p左移时,q右移
return p->val == q->val && check(p->left, q->right) && check(p->right, q->left);
}
public:
bool isSymmetric(TreeNode* root) {
return check(root, root);
}
};