题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
分析
原本使用一个队列可以实现,
现在换成一个堆栈+vector+sign
代码实现
vector<vector<int> > Print(TreeNode* root) {
vector<vector<int> >res;
if(!root)
return res;
TreeNode*p=NULL;
S.push(root);
bool sign = false;
while(!S.empty()){
vector<TreeNode*>r;vector<int>rv;
while(!S.empty()){
p = S.top();
r.push_back(p);
rv.push_back(p->val);
S.pop();
}
for(int i=0;i<r.size();i++){
p=r[i];
if(sign){
if(p->right ) S.push(p->right );
if(p->left) S.push(p->left);
}
else{
if(p->left) S.push(p->left);
if(p->right ) S.push(p->right );
}
}
sign=!sign;
if(!rv.empty())res.push_back(rv);
}
return res;
}
stack<TreeNode*>S;