程序员面试金典--按之字形顺序打印二叉树

程序员面试金典--按之字形顺序打印二叉树

题目描述

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

 

 

使用 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; 
    }
};

  

posted @ 2017-08-04 15:14  zhang--yd  阅读(155)  评论(0编辑  收藏  举报