題目鏈接:把二叉樹打印成多行
題意:
給出一個指針形式存儲的二叉樹,將中的值存入二維數組中
從上到下按層打印二叉樹,同一層結點從左至右輸出。每一層輸出一行。
解題思路:
用隊列存儲每一行的節點,依次遍歷隊列中的每個節點,將其中的值存入中間數組
/*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;
}
};