劍指offer------把二叉樹打印成多行

從上到下按層打印二叉樹,同一層結點從左至右輸出。每一層輸出一行。


/*
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>>out;
        if(pRoot==NULL)
            return out;
        //用隊列存儲,pair中int表示二叉樹的層數,從0層開始
        queue<pair<TreeNode*,int>>record;
        //給隊列尾部push一個pair,也可以用make_pair(root,0)
        record.push(make_pair(pRoot,0));
        while(!record.empty())
        {
            //取出隊頭
            TreeNode*node=record.front().first;
            int lever=record.front().second;
            //彈出對頭
            record.pop();
            //如果lever和out的size大小相等,則說明是一個新層,開闢空間
            if(lever==out.size())
                out.push_back(vector<int>());
            //在相應的層後面添加元素
            out[lever].push_back(node->val);
            //左孩子不爲空,將左孩子放入隊列中
            if(node->left!=NULL)
                record.push(make_pair(node->left,lever+1));
            //右孩子不爲空,將右孩子放入隊列中
            if(node->right!=NULL)
                record.push(make_pair(node->right,lever+1));
        }
        return out;
    }
};

 

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