题目描述如下:
解决思路:这道题是我在BFS分类中找的,所以就试图用广搜的想法来解决,关键思路就是
1、left对应right
2、left->left对应right->right
3、left->right对应right->left;
技巧就是设立两个队列,一个保存左边的元素,另一个保存右边的元素。
代码如下:
/**
* 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 isSameNode(TreeNode* a, TreeNode* b){
if( (!a&&!b) || ((a&&b)&&(a->val==b->val)))
return true;
else
return false;
}
bool isSymmetric(TreeNode* root) {
if(!root)
return true;
queue<TreeNode*> lqueue;
queue<TreeNode*> rqueue;
lqueue.push(root->left);
rqueue.push(root->right);
bool tmp = true;
while(!lqueue.empty() && !rqueue.empty())
{
TreeNode* lfront = lqueue.front();
TreeNode* rfront = rqueue.front();
lqueue.pop();
rqueue.pop();
if(!isSameNode(lfront, rfront))
{
tmp = false;
break;
}
if(lfront)
lqueue.push(lfront->left);
if(rfront)
rqueue.push(rfront->right);
if(lfront)
lqueue.push(lfront->right);
if(rfront)
rqueue.push(rfront->left);
}
return tmp;
}
};
按照同样的思路,可以写成递归的形式,代码如下:
/**
* 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 isSameNode(TreeNode* a, TreeNode* b){
if( (!a&&!b) || ((a&&b)&&(a->val==b->val)))
return true;
else
return false;
}
bool isSymmetric(TreeNode* root) {
if(!root)
return true;
return isSym(root->left, root->right);
}
bool isSym(TreeNode* a, TreeNode* b){
if(!isSameNode(a,b))
return false;
if(!a&&!b)
return true;
if(a&&b)
return ( (isSym(a->left, b->right)) && (isSym(a->right, b->left)));
}
};