时间限制:1秒 空间限制:32768K 热度指数:234123
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
方法:借助栈来实现
代码如下:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
vector<vector<int> >res;
stack<TreeNode *>st[2];
vector<vector<int> > Print(TreeNode* pRoot) {
if(pRoot==NULL) return res;
st[0].push(pRoot);
while(!st[0].empty()||!st[1].empty()){
vector<int>v[2];
//偶数行
while(!st[0].empty()){
v[0].push_back(st[0].top()->val);
if(st[0].top()->left != NULL){
st[1].push(st[0].top()->left);
}
if(st[0].top()->right != NULL){
st[1].push(st[0].top()->right);
}
st[0].pop();
}
if(!v[0].empty()){
res.push_back(v[0]);
}
// 奇数行
while(!st[1].empty()){
v[1].push_back(st[1].top()->val);
if(st[1].top()->right != NULL){
st[0].push(st[1].top()->right);
}
if(st[1].top()->left != NULL){
st[0].push(st[1].top()->left);
}
st[1].pop();
}
if(!v[1].empty()){
res.push_back(v[1]);
}
}
return res;
}
};