自己写的…简单记录下吧,要注意空树情况(好久没一遍ac了)
用递归的版本(跑的慢):
class Solution {
public:
bool go(TreeNode* root1,TreeNode* root2){
if((root1==NULL&&root2!=NULL)||(root1!=NULL&&root2==NULL))return false;
if(root1==NULL&&root2==NULL)return true;
if(root1->val!=root2->val)return false;
return go(root1->left,root2->right)&go(root1->right,root2->left);
}
bool isSymmetric(TreeNode* root) {
if(root==NULL)return true;
return go(root->left,root->right);
}
};
用迭代的方法(跑的更快很多):
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root==NULL)return true;
TreeNode *p,*q;
stack<TreeNode *>zuo;
stack<TreeNode *>you;
zuo.push(root->left);
you.push(root->right);
while(zuo.empty()!=true&&you.empty()!=true){
p=zuo.top();
zuo.pop();
q=you.top();
you.pop();
if(p!=NULL&&q!=NULL){
if(p->val!=q->val)return false;
zuo.push(p->left);
zuo.push(p->right);
you.push(q->right);
you.push(q->left);
}
if(p!=NULL&&q==NULL||p==NULL&&q!=NULL)return false;
}
if((zuo.empty()&you.empty())==false)return false;
return true;
}
};
代码名还是不好看…不过迭代能一遍AC蛮舒服的!stack的empty()是在堆栈为空时才为真,这个要稍微记一哈!