Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

16_II / дерево

.cpp
Скачиваний:
18
Добавлен:
10.02.2015
Размер:
1.89 Кб
Скачать
#include<iostream.h>
#include<fstream.h>

struct tru{tru *left;tru *right; int data;};
struct ochered{ochered *next; tru *root;};
ifstream f("abc.txt");




void ochist_ochered(ochered *&g_beg, ochered *&g_end){
	g_beg=NULL;
g_end=NULL;}




void v_ochered(ochered *&g_beg,ochered *&g_end, tru *t){
ochered*p;
if(g_beg!=NULL)
{
	p=new ochered;
	p->root=t;
	g_end->next=p;
	p->next=NULL;
	g_end=p;}
else
{
	p=new ochered;
	p->root=t;
	g_beg=p;
	g_end=p;
	p->next=NULL;}
}



void iz_ochered(ochered *&g_beg, tru *&t){
	t=g_beg->root;
	g_beg=g_beg->next;
}




void create_tru(ifstream &f, tru *&t){
	tru *p, *m;
	bool b;
	int x;
	t=NULL;
while(!f.eof())
{
	f>>x;
	if(t==NULL)
	{
		m=new tru;
		m->data=x;
		m->left=NULL;
		m->right=NULL;
		t=m;
	}
	else
	{
		m=t;
		b=true;
		while(b)
		{
			if(x>=m->data)
			{
				if(m->right!=NULL) m=m->right;
				else
				{
					p=new tru;
					p->data=x;
					p->left=NULL;
					p->right=NULL;
					m->right=p;
					b=false;
				}
			}
			else
			{
				if(m->left!=NULL) m=m->left;
				else
				{
					p=new tru;
					p->data=x;
					p->left=NULL;
	                p->right=NULL;
					m->left=p;
					b=false;
}}}}}}




void levels(tru *T){
	ochered *g_beg, *g_end;;
	int n,k,k1,i;
	tru *p;
	p=T;
	if(p!=NULL)
	{
		ochist_ochered(g_beg, g_end);
		n=0;
			v_ochered(g_beg, g_end,p);
			k=1;
			do
			{
				cout<<n<<"-i ypoven";
				k1=0;
				for(i=1; i<=k; i++)
				{
					iz_ochered(g_beg,p);
					cout<<" "<<p->data;
					if(p->left!=NULL)
					{
						v_ochered(g_beg, g_end,p->left);
						k1++;}

						if(p->right!=NULL)
					{
						v_ochered(g_beg, g_end,p->right);
						k1++;}
				}
				cout<<endl;
				n++;
				k=k1;}
			while(k!=0);}}







void main(){
	tru*t;
	
	create_tru(f,t);
	
	levels(t);}