面試題32 - II. 從上到下打印二叉樹 II
解題思路:
BFS從根節點開始遍歷二叉樹,如何判斷當前是哪一層呢?利用tag打標記,第一次的end_node設置爲root ,後面記錄下一層的最後一個節點,用tag存儲,當前層的最後一個節點進入隊列的時候,將當前的vector壓入結果中,清空vector並更新end_node的值。
源代碼:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
queue<TreeNode *> que;
int number[100][1002] = {-1};
public:
// 典型的bfs應用
vector<vector<int>> levelOrder(TreeNode* root) {
int level = 0;
vector<vector<int>> res;
vector<int> tmp;
if(!root) return res;
que.push(root);
TreeNode *end_node = root, *c_node = root, *tag = end_node;
while(!que.empty()){
tmp.push_back(c_node->val);
que.pop();
if(c_node->left){
que.push(c_node->left);
tag = c_node->left;
}
if(c_node->right){
que.push(c_node->right);
tag = c_node->right;
}
// 當前層已經結束,更新end_node的值
if(c_node == end_node){
end_node = tag;
res.push_back(tmp);
tmp.clear();
level ++;
}
c_node = que.front();
}
return res;
}
};