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] ]
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
1 / 2 3 / 4 5The above binary tree is serialized as
"{1,2,3,#,#,4,#,#,5}"
.广度优先
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: 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> >ret; if(root==NULL)return ret; q.push(root); int level=0; ret.resize(level+1); int count=1; int nextCount=0; while(q.size()>0){ if(count==0){ level++; ret.resize(level+1); count=nextCount; nextCount=0; } TreeNode* current=q.front(); ret[level].push_back(current->val); q.pop(); if(current->left!=NULL){ q.push(current->left); nextCount++; } if(current->right!=NULL){ q.push(current->right); nextCount++; } count--; } return ret; } };