Binary Tree Level Order Traversal
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]
]
My Submitted Code
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
struct TreeNodeWithL{
TreeNode* node;
int level;
TreeNodeWithL(TreeNode* n,int l):node(n),level(l){}
};
class Solution {
public:
vector<vector<int> > levelOrder(TreeNode *root) {
vector<vector<int> > result;
vector<int> le;
queue<TreeNodeWithL> q; //层次遍历使用队列
if(!root){
return result;
}
TreeNodeWithL node(root,0);
q.push(node);
int currlev=-1;
while(!q.empty()){
TreeNodeWithL node=q.front(); //每次取队列头,然后弹出
q.pop();
if(node.node->left){
TreeNodeWithL lnode(node.node->left,node.level+1);
q.push(lnode);
}
if(node.node->right){
TreeNodeWithL rnode(node.node->right,node.level+1);
q.push(rnode);
}
if(currlev!=node.level){
if(currlev!=-1){
result.push_back(le);
}
currlev=node.level;
le.clear();
le.push_back(node.node->val);
}else{
le.push_back(node.node->val);
}
}
result.push_back(le);
return result;
}
};