方法一:使用广度遍历(BFS),通过输入两个根节点将对称的两个结对送入到queue中,并且两两释放
遇到问题:continue的使用方法要注意
/*** 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 {public:bool isSymmetric(TreeNode* root) {bool ret=check(root,root);return ret;}bool check(TreeNode* u,TreeNode* v){if(u==NULL&&v==NULL){return true;}else if(u==NULL||v==NULL){return false;}queue<TreeNode*>q;q.push(u);q.push(v);while(!q.empty()){TreeNode* head1=q.front();q.pop();TreeNode* head2=q.front();q.pop();if(head1==NULL&&head2==NULL){continue;}else if(head1==NULL||head2==NULL){return false;}if(head1->val!=head2->val){return false;}q.push(head1->left);q.push(head2->right);q.push(head1->right);q.push(head2->left);}return true;}};
方法二:递归
class Solution {public:bool isSymmetric(TreeNode* root) {bool ret;ret=check(root,root);return ret;}bool check(TreeNode* u,TreeNode* v){if(u==NULL&&v==NULL){return ret;}else if(u==NULL||v==NULL){return ret= false;}if(u->val!=v->val){ret= false;}ret=check(u->left,v->right);ret=check(u->right,v->left);return ret;}private:bool ret=true;};
