每次比较两个对称指针节点的值,可以设置两个指针,他们每次都一个向左,一个向右,每次递归来实现。
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
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 {
public:
bool isSymmetric(TreeNode* root) {
if (root == nullptr)return true;
else return check(root->left, root->right);
}
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);
}
};
int main() {
Solution test;
TreeNode* c = new TreeNode(3);
TreeNode* b = new TreeNode(2, c, nullptr);
TreeNode* a = new TreeNode(1, nullptr, b);
cout << test.isSymmetric(a);
}