#include <iostream>
#include <vector>
using namespace std;
struct Node
{
Node(int v) : val(v), lchild(0), rchild(0)
{}
int val;
Node *lchild, *rchild;
};
vector<vector<Node*> > vv;
int lev = 0;
void level_walk()
{
vector<Node*>::iterator iter;
while(true)
{
if(vv[lev].empty())
return;
vector<Node*> v;
for(iter = vv[lev].begin(); iter != vv[lev].end(); ++iter)
{
Node *root = *iter;
cout << root->val << " ";
if(root->lchild)
v.push_back(root->lchild);
if(root->rchild)
v.push_back(root->rchild);
}
vv.push_back(v);
lev++;
cout << endl;
}
}
int main(void)
{
Node *root = new Node(1);
Node *node1 = new Node(2); root->lchild = node1;
Node *node2 = new Node(3); root->rchild = node2;
Node *node3 = new Node(4); node1->lchild = node3;
Node *node4 = new Node(5); node1->rchild = node4;
Node *node5 = new Node(6); node2->lchild = node5;
Node *node6 = new Node(7); node2->rchild = node6;
vector<Node*> v;
v.push_back(root);
vv.push_back(v);
level_walk();
return 0;
}