劍指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>> res;
        if(pRoot == NULL){    // 如果根節點爲空,直接返回
            return res;
        }
        queue<TreeNode*> q;    // 隊列,存儲每一行的節點
        q.push(pRoot);
        while(!q.empty()){
            int n = q.size();  // 判斷隊列大小 
            vector<int> v;     // 中間數組,存儲結果
            while(v.size() < n){
                TreeNode* pRoot = q.front();  // 從隊列中依次去除某一行的每個節點
                q.pop();                      // 取出後,從隊列中移除該節點
                v.push_back(pRoot->val);      // 獲取此節點對應的值
                if(pRoot->left){              // 判斷是否存在左節點
                    q.push(pRoot->left);
                }
                if(pRoot->right){             // 判斷是否存在右節點
                    q.push(pRoot->right);
                }
            }
            res.push_back(v);              // 將一行的結果存入最終數組中
        }
        return res;
    }
};

 

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