sundeepblue
4/29/2014 - 8:52 PM

binary tree level order traversal

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;
}