您的位置:首页 > Web前端

剑指offer:按之字形顺序打印二叉树

2016-05-05 09:58 288 查看
题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

/*
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> > Print(TreeNode* pRoot) {

vector<vector<int> >res;

if (pRoot == NULL){
return res;
}

stack<TreeNode*> stk[2];

int cur = 0;
int next = 1;
int index = 1;

vector<int> level;

stk[cur].push(pRoot);

while (!stk[cur].empty()){

TreeNode* top = stk[cur].top();
stk[cur].pop();
level.push_back(top->val);

if (index % 2 == 1){
if (top->left){
stk[next].push(top->left);
}
if (top->right){
stk[next].push(top->right);
}
}
else{
if (top->right){
stk[next].push(top->right);
}
if (top->left){
stk[next].push(top->left);
}
}

if (stk[cur].empty()){
swap(cur, next);
index++;
res.push_back(level);
level.clear();
}

}

return res;
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: