思路一:
递归
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool test(TreeNode* root1,TreeNode* root2)
{
if(root1==NULL&&root2==NULL)
{
return true;
}
if(root1==NULL||root2==NULL)
{
return false;
}
return (root1->val==root2->val)&&test(root1->left,root2->right)&&test(root1->right,root2->left);
}
bool isSymmetric(TreeNode* root)
{
return test(root,root);
}
};
思路二:
迭代
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSymmetric(TreeNode* root)
{
queue<TreeNode*> queue_T;
TreeNode* root1;
TreeNode* root2;
if(root==NULL)
{
return true;
}
else
{
queue_T.push(root);
queue_T.push(root);
while(queue_T.size()!=0)
{
root1=queue_T.front();
queue_T.pop();
root2=queue_T.front();
queue_T.pop();
if(root1==NULL&&root2==NULL)
{
continue;
}
if(root1==NULL||root2==NULL)
{
return false;
}
if(root1->val!=root2->val)
{
return false;
}
else
{
queue_T.push(root1->left);
queue_T.push(root2->right);
queue_T.push(root1->right);
queue_T.push(root2->left);
}
}
return true;
}
}
};