Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
Accept: 11ms
#include <math.h>
struct Pair {
int i;
TreeNode *node;
};
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
Solution() {
_result = new vector<vector<int> >;
}
~Solution() {
delete _result;
}
vector<vector<int> > levelOrder(TreeNode *root) {
_result->clear();
if (root == NULL) {
return *_result;
}
Pair *p = new Pair;
p->i = 0;
p->node = root;
_que.push(p);
outputTree(*_result);
return *_result;
}
protected:
void outputTree(vector<vector<int> > &result) {
if (_que.empty()) {
return;
}
Pair *p = _que.front();
_que.pop();
// output:
int level = p->i;
if (result.size() <= level) {
result.resize(level + 1);
}
result[level].push_back(p->node->val);
// handle children:
if (p->node->left) {
Pair *left = new Pair;
left->i = p->i + 1;
left->node = p->node->left;
_que.push(left);
}
if (p->node->right) {
Pair *right = new Pair;
right->i = p->i + 1;
right->node = p->node->right;
_que.push(right);
}
delete p;
outputTree(result);
}
private:
queue<Pair*> _que;
vector<vector<int> > *_result;
};