C++ 代码
iterative:(用到二叉树的层序遍历算法)
/**
* 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) {
if(root == NULL)
{
return true ;
}
else
{
TreeNode *l = root->left ;
TreeNode *r = root->right ;
queue<TreeNode*>rt,lt ;
// 分别层序遍历左子树和右子树,其中右子树是镜像层序遍历
rt.push(r) ;
lt.push(l) ;
while(!rt.empty() && !lt.empty())
{
l = lt.front() ;
r = rt.front() ;
lt.pop() ;
rt.pop() ;
if((!l) && (!r))continue ;
if((!l) || (!r))return false ;
if(l->val != r->val)return false ;
lt.push(l->left) ;
lt.push(l->right) ;
rt.push(r->right) ;
rt.push(r->left) ;
}
return true ;
}
}
};
recursive
class Solution {
public:
bool isSymmetric2(TreeNode *l,TreeNode *r){
if(!l && !r)return true ;
if(l && r && l->val == r->val)
return isSymmetric2(l->left,r->right) && isSymmetric2(r->left,l->right) ;
return false ;
}
bool isSymmetric(TreeNode *root) {
if(root == NULL)
{
return true ;
}
else
{
TreeNode *l = root->left ;
TreeNode *r = root->right ;
return isSymmetric2(l,r) ;
}
}
};