面试题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;
}
};