Given a binary search tree, design an algorithm which creates a linked list of all the nodes at each depth (i.e., if you have a tree with depth D, you’ll have D linked lists).
#include <list>
#include <iostream>
using namespace std;
struct TreeNode
{
int value;
TreeNode * left;
TreeNode * right;
TreeNode(int v)
{
value = v;
left = NULL;
right = NULL;
}
TreeNode(int v, TreeNode * l, TreeNode * r)
{
value = v;
left = l;
right = r;
}
};
list<list<TreeNode*> > FindLevel(TreeNode * node)
{
list<list<TreeNode*> > listlevel;
list<TreeNode*> first_level;
first_level.push_back(node);
listlevel.push_back(first_level);
list<list<TreeNode*> >::iterator list_iter = listlevel.begin();
for (; list_iter != listlevel.end(); ++ list_iter)
{
list<TreeNode*> level;
list<TreeNode*>::iterator node_iter = (*list_iter).begin();
for (; node_iter != (*list_iter).end(); ++node_iter)
{
cout<<(*node_iter)->value<<endl;
level.push_back((*node_iter)->left);
level.push_back((*node_iter)->right);
}
listlevel.push_back(level);
}
return listlevel;
}
int main()
{
TreeNode * node1 = new TreeNode(0);
TreeNode * node2 = new TreeNode(1);
TreeNode * node3 = new TreeNode(2, node1, node2);
TreeNode * node4 = new TreeNode(3);
TreeNode * node5 = new TreeNode(4, node3, node4);
FindLevel(node5);
}