题目: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 7return its level order traversal as:
[ [3], [9,20], [15,7] ]
要求将树按行顺序输出,同一级的节点存在一个容器中。因为是完全按顺序存储,所以可以使用vector容器,同时为了保持父节点的信息,需要在开辟一个缓存容器,并交替使用,代码如下:
vector<vector<int> > levelOrder(TreeNode *root)
{
vector<TreeNode *> stk ;
vector<vector<int> > vec;
TreeNode* node;
if(root ==NULL) return vec;
stk.push_back(root);
vector<int> data;
data.push_back(root->val );
while(!stk.empty())
{
if(!data.empty())vec.push_back(data); //存入一行的所有节点
data.clear();
vector<TreeNode *> res;
for(vector<TreeNode *>::iterator it=stk.begin(); it!=stk.end(); it++)
{
node=*it;
if(node->left !=NULL) //先左后右
{
res.push_back (node->left ); //存入节点
data.push_back(node->left->val ); //存入数据
}
if(node->right !=NULL)
{
res.push_back (node->right);
data.push_back(node->right->val );
}
}
stk.clear();
stk=res;
}
return vec;
}