从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。算法:层次遍历二叉树,需要记录每层节点数目以及初始化头节点。
vector<vector<int> > Print(TreeNode* pRoot) {
vector<int> single;
vector<vector<int> > ans;
if(pRoot==NULL)
return ans;
queue<TreeNode*> que;
TreeNode* p = pRoot;
que.push(p);
//已知有头节点 len为1 接下来判断第二层 节点
int count=0,len=1;
if(p->left!=NULL)
count++;
if(p->right!=NULL)
count++;
while(!que.empty()) //层次遍历
{
p = que.front();
que.pop();
//判断一层节点是否遍历结束
if(len>1) //未结束
{
single.push_back(p->val);
len--;
}
else if(len==1) //结束
{
single.push_back(p->val);
ans.push_back(single);
len =count ;
count = 0;
single.clear();
}
if(p->left!=NULL)
{
que.push(p->left);
count++;
}
if(p->right!=NULL)
{
que.push(p->right);
count++;
}
}
return ans;
}