1. 程式人生 > >【劍指**】32-2 分行從上到下列印二叉樹

【劍指**】32-2 分行從上到下列印二叉樹

32-2 分行從上到下列印二叉樹

題目描述

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

分析

有兩種容易想到的方法都可以解決這個問題

第一個是額外再增加一個輔助棧,將當前層和下一層的節點分開。
這種方法簡單易行,但是會佔用額外的空間,時間開銷也會增大。

第二種是用標誌變數,記錄每一行的的節點數。本題給出的程式碼是法1. 法2的程式碼可以參考書上。 《劍指offer》 p174

程式碼

/*
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) { if (pRoot == NULL) return {}; queue<TreeNode*> q; queue<TreeNode*> q_help; TreeNode* read = pRoot; q.push(read); vector<vector
<int>
>
ret; while (!q.empty()) { vector<int> ret_tmp; while (!q.empty()) { TreeNode* tmp = q.front(); q.pop(); ret_tmp.push_back(tmp->val); if (tmp->left) { q_help.push(tmp->left); } if
(tmp->right) { q_help.push(tmp->right); } } ret.push_back(ret_tmp); while (!q_help.empty()) { q.push(q_help.front()); q_help.pop(); } } return ret; } };