binary tree level order traversal
vector<vector<int>> binary_tree_level_order_traversal(treenode *root) {
vector<vector<int>> res;
if(!root) return res;
vector<int> nodes_this_level;
queue<treenode*> q; // should be queue not deque, because deque has methods push_back, push_front, pop_back, pop_front
q.push(root);
int cur_level = 1, next_level = 0;
vector<int> nodes_next_level;
while(!q.empty()) {
treenode *cur = q.top();
q.pop();
//if(!cur) continue; // no need to have this
nodes_this_level.push_back(cur->val);
cur_level--;
if(cur->left) {
q.push(cur->left);
next_level++;
}
if(cur->right) {
q.push(cur->right);
next_level++;
}
if(cur_level == 0) {
res.push_back(nodes_this_level);
nodes_this_level.clear();
cur_level = next_level;
next_level = 0;
}
}
return res;
}