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] ]
vector<vector<int> > levelOrder(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
queue<TreeNode*> q;
vector<vector<int> > v;
if (NULL == root) {
return v;
}
q.push(root);
vector<int> v0;
v0.push_back(root->val);
v.push_back(v0);
while (!q.empty()) {
queue<TreeNode*> tmp;
vector<int> vi;
while (!q.empty()) {
TreeNode* node = q.front();
if (node->left != NULL) {
tmp.push(node->left);
vi.push_back(node->left->val);
}
if (node->right != NULL) {
tmp.push(node->right);
vi.push_back(node->right->val);
}
q.pop();
}
if (vi.size() > 0) {
v.push_back(vi);
}
q = tmp;
}
return v;
}
用隊列來保存每層訪問過的節點