方法一:使用广度遍历(BFS),通过输入两个根节点将对称的两个结对送入到queue中,并且两两释放
    遇到问题:continue的使用方法要注意

    1. /**
    2. * Definition for a binary tree node.
    3. * struct TreeNode {
    4. * int val;
    5. * TreeNode *left;
    6. * TreeNode *right;
    7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
    8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    10. * };
    11. */
    12. class Solution {
    13. public:
    14. bool isSymmetric(TreeNode* root) {
    15. bool ret=check(root,root);
    16. return ret;
    17. }
    18. bool check(TreeNode* u,TreeNode* v){
    19. if(u==NULL&&v==NULL){
    20. return true;
    21. }
    22. else if(u==NULL||v==NULL){
    23. return false;
    24. }
    25. queue<TreeNode*>q;
    26. q.push(u);
    27. q.push(v);
    28. while(!q.empty()){
    29. TreeNode* head1=q.front();
    30. q.pop();
    31. TreeNode* head2=q.front();
    32. q.pop();
    33. if(head1==NULL&&head2==NULL){
    34. continue;
    35. }
    36. else if(head1==NULL||head2==NULL){
    37. return false;
    38. }
    39. if(head1->val!=head2->val){
    40. return false;
    41. }
    42. q.push(head1->left);
    43. q.push(head2->right);
    44. q.push(head1->right);
    45. q.push(head2->left);
    46. }
    47. return true;
    48. }
    49. };

    方法二:递归

    1. class Solution {
    2. public:
    3. bool isSymmetric(TreeNode* root) {
    4. bool ret;
    5. ret=check(root,root);
    6. return ret;
    7. }
    8. bool check(TreeNode* u,TreeNode* v){
    9. if(u==NULL&&v==NULL){
    10. return ret;
    11. }
    12. else if(u==NULL||v==NULL){
    13. return ret= false;
    14. }
    15. if(u->val!=v->val){
    16. ret= false;
    17. }
    18. ret=check(u->left,v->right);
    19. ret=check(u->right,v->left);
    20. return ret;
    21. }
    22. private:
    23. bool ret=true;
    24. };