劍指offer---按之字形順序打印二叉樹

題目描述

請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
    vector<vector<int> > v;
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        if(!pRoot)
            return v;
        bool even=false;
        queue<TreeNode*> que;
        que.push(pRoot);
        while(!que.empty()){
            vector<int> ve;
            int s=que.size();
            TreeNode* node=nullptr;
            for(int i=0;i<s;++i){
                node=que.front();
                que.pop();
                ve.push_back(node->val);
                if(node->left) que.push(node->left);
                if(node->right) que.push(node->right);
            }
            if(even)
                reverse(ve.begin(),ve.end());
            v.push_back(ve);
            even=!even;
        }
        return v;

    /*vector<vector<int>> res;
        if(!pRoot)
            return res;
        queue<TreeNode*> que;
        que.push(pRoot);
        bool even = false;
        while(!que.empty()){
            vector<int> vec;
            const int size = que.size();
            for(int i=0; i<size; ++i){
                TreeNode* tmp = que.front();
                que.pop();
                vec.push_back(tmp->val);
                if(tmp->left != NULL)
                    que.push(tmp->left);
                if(tmp->right != NULL)
                    que.push(tmp->right);
            }
            if(even)
                std::reverse(vec.begin(), vec.end());
            res.push_back(vec);
            even = !even;
        }
        return res;
        */
    }
};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章