程序员面试金典--按之字形顺序打印二叉树
程序员面试金典--按之字形顺序打印二叉树
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
使用 bfs 和 depth 相结合。
/*
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> > ans;
if(pRoot == NULL) {
return ans;
}
TreeNode *pt = pRoot, *cur_s;
queue<TreeNode*> stk;
queue<int> skd;
stk.push( pt );
skd.push( 1 );
int cur_tmp, depth = 1;
vector<int> tmp;
while(!stk.empty()){
cur_s = stk.front(); stk.pop();
cur_tmp = skd.front(); skd.pop();
if(cur_tmp != depth){
if(depth%2 == 0){
reverse(tmp.begin(), tmp.end());
}
ans.push_back(tmp);
tmp.clear();
depth = cur_tmp;
}
tmp.push_back( cur_s->val );
if( cur_s->left ){
stk.push( cur_s->left );
skd.push( cur_tmp + 1 );
}
if( cur_s->right ){
stk.push( cur_s->right );
skd.push( cur_tmp + 1 );
}
}
if(tmp.size() > 0){
if(depth%2 == 0){
reverse(tmp.begin(), tmp.end());
}
ans.push_back( tmp );
}
return ans;
}
};

浙公网安备 33010602011771号