题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路:两个栈,父节点保存一个栈,从右到左输入,从左到右输出,孩子节点在另一个栈,从左到右输入,从右到左输出;
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int>>res;
if(pRoot==NULL) return res;
stack<TreeNode*>q1;
stack<TreeNode*>q2;
q1.push(pRoot);
while(!q1.empty()||!q2.empty())
{
vector<int>r;
while(!q1.empty())
{
TreeNode*p=q1.top();
r.push_back(p->val);
q1.pop();
if(p->left) q2.push(p->left);
if(p->right) q2.push(p->right);
}
res.push_back(r);
r.clear();
bool flag=false;
while(!q2.empty())
{
flag=true;
TreeNode*p=q2.top();
r.push_back(p->val);
q2.pop();
if(p->right) q1.push(p->right);
if(p->left) q1.push(p->left);
}
if(flag)
res.push_back(r);
}
return res;
}
vector<vector<int>>res;
if(pRoot==NULL) return res;
stack<TreeNode*>q1;
stack<TreeNode*>q2;
q1.push(pRoot);
while(!q1.empty()||!q2.empty())
{
vector<int>r;
while(!q1.empty())
{
TreeNode*p=q1.top();
r.push_back(p->val);
q1.pop();
if(p->left) q2.push(p->left);
if(p->right) q2.push(p->right);
}
res.push_back(r);
r.clear();
bool flag=false;
while(!q2.empty())
{
flag=true;
TreeNode*p=q2.top();
r.push_back(p->val);
q2.pop();
if(p->right) q1.push(p->right);
if(p->left) q1.push(p->left);
}
if(flag)
res.push_back(r);
}
return res;
}