每次比较两个对称指针节点的值,可以设置两个指针,他们每次都一个向左,一个向右,每次递归来实现。
#include#include #include 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); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)