题解 | #求二叉树的层序遍历#
求二叉树的层序遍历
http://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3
这道题把二叉树的层序遍历的内容基本考完了,主要是考察队列的使用(先进先出),即广度搜索。同时也要求输出二叉树每一层,所以这里使用了一个map来记录层号,注意一下vector的两个函数,size和capacity,一个是当前大小,一个是容量。 代码如下:
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型vector<vector<>>
*/
vector<vector<int> > levelOrder(TreeNode* root) {
// write code here
queue<TreeNode*> st;
vector<vector<int> > res;
map<TreeNode*,int> score;
TreeNode* p = root;
int i = 0;
if(p==NULL)
return res;
st.push(p);
score[p] = 0;
while(!st.empty())
{
TreeNode* kk = st.front();
st.pop();
if(score[kk]+1>res.size())
res.resize(score[kk]+1);
res[score[kk]].push_back(kk->val);
if(kk->left)
{
st.push(kk->left);
score[kk->left] = score[kk]+1;
}
if(kk->right)
{
st.push(kk->right);
score[kk->right] = score[kk]+1;
}
}
return res;
}
};
