[劍指offer]從上到下打印二叉樹II-——把二叉樹打印成多行
題目描述
從上到下按層打印二叉樹,同一層的節點按從左到右的順序打印,每一層打印到一行。
例如:
給定二叉樹: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其層次遍歷結果:
[
[3],
[9,20],
[15,7]
]
提示:
節點總數 <= 1000
解題思路
- 在劍指offer-從上到下打印二叉樹的基礎上,多加了一個判斷。
- 根節點出隊後,根節點的左右子樹節點入隊,之後隊列每出去一層節點,它們的下一層子節點會進隊,所以,每次出隊之前的隊列大小代表這一層有幾個節點。
實現代碼
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>>res;
queue<TreeNode*> que;
que.push(root);
while(!que.empty()){
<vector<int>list;
int num = que.size();//隊列大小代表這一層有幾個節點
while(num--){
TreeNode* temp = que.front();//獲得隊列頭節點
que.pop();
if(temp){//節點不爲null時
list.push_back(temp->val);//節點值保存
que.push(temp->left);//左子樹入隊
que.push(temp->right);//右子樹入隊
}
}
if(!list.empty())//list有可能是[]
res.push_back(list);
}
return res;
}
};