劍指offer(C++)——把二叉樹列印成多行
題目描述
從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。
/*
思路:對二叉樹進行層次遍歷,利用一個佇列來儲存將要列印的結點。為了把二叉樹的每一層結點單獨列印到一行,
需要設定兩個變數:一個表示當前層中還沒有列印的結點數(currentLevels),另一個表示下一層結點的數目(nextLevels)
*/
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>> Value{};
if (pRoot == NULL)
return Value;
queue<TreeNode* > queNode;
queNode.push(pRoot);
vector<int> subValue; //輔助陣列,儲存當前層所有的結點值
int nextLevels = 0; //用來統計下一層的結點數
int currentLevels = 1; //用來標記當前層剩餘的沒有列印的結點數
while (!queNode.empty())
{
TreeNode* pNode = queNode.front();
queNode.pop();
subValue.push_back(pNode->val);
if (pNode->left != NULL)
{
queNode.push(pNode->left);
++nextLevels;
}
if (pNode->right != NULL)
{
queNode.push(pNode->right);
++nextLevels;
}
--currentLevels;
if (currentLevels == 0) //如果當前層結點已全部列印完畢
{
Value.push_back(subValue);
subValue.clear(); //清空,開始存下一層結點
currentLevels = nextLevels; //下一層要列印的結點數
nextLevels = 0; //置0,開始統計下一層結點數
}
}
return Value;
}
};
相關文章
- [劍指offer] 把二叉樹列印成多行二叉樹
- 劍指offer--把二叉樹列印成多行(C++)二叉樹C++
- 《劍指offer》:[60]把二叉樹列印成多行二叉樹
- 劍指offer——二叉樹的映象C++二叉樹C++
- 劍指offer——二叉樹的深度C++二叉樹C++
- 劍指offer——重建二叉樹二叉樹
- 【劍指offer】二叉樹深度二叉樹
- 劍指offer——把陣列排成最小的數C++陣列C++
- 劍指offer(四)重建二叉樹二叉樹
- 劍指offer——從上往下列印二叉樹C++二叉樹C++
- 劍指 Offer 07. 重建二叉樹二叉樹
- 【劍指offer】判斷二叉樹平衡二叉樹
- 劍指Offer-40-二叉樹的深度二叉樹
- 【劍指offer】27. 二叉樹的映象二叉樹
- 《劍指offer》:[59]對稱的二叉樹二叉樹
- 《劍指offer》:[39]求解二叉樹的深度二叉樹
- 《劍指offer》:[62]序列化二叉樹二叉樹
- 【劍指offer】把陣列排成最小的數陣列
- 劍指offer | 55 - I. 二叉樹的深度二叉樹
- 【劍指offer】從上向下列印二叉樹二叉樹
- 劍指offer——把字串轉換成整數C++字串C++
- 【劍指offer】5.二叉樹的映象和列印二叉樹
- 力扣 - 劍指 Offer 27. 二叉樹的映象力扣二叉樹
- 劍指Offer-34-把陣列排成最小的數陣列
- # 劍指 Offer 68 - II. 二叉樹的最近公共祖先二叉樹
- 《劍指offer》之在完全二叉樹中新增子節點二叉樹
- 《劍指offer》:[58]二叉樹的下一個結點二叉樹
- 《劍指offer》:[61]按之字形順序列印二叉樹二叉樹
- 劍指offer——陣列中的逆序對C++(75%)陣列C++
- 劍指 Offer 32 - III. 從上到下列印二叉樹 III二叉樹
- 《劍指offer》:[39-1]判斷是否為平衡二叉樹二叉樹
- 【劍指offer】二叉樹中和為某一值的路徑二叉樹
- 劍指 offer(1) -- 陣列篇陣列
- 【劍指offer】樹的子結構
- 力扣 - 劍指 Offer 45. 把陣列排成最小的數力扣陣列
- 《劍指 Offer》棧實現佇列佇列
- 《劍指offer》:[49]把字串轉化成整數字串
- LeetCode C++ 劍指 Offer 51. 陣列中的逆序對【歸併排序/樹狀陣列/線段樹】LeetCodeC++陣列排序