Добавил:
Yanus
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:lab - moroz / Lab7-2 / Lab7-2
.cpp#include <stdio.h>
#include <stdlib.h>
typedef struct TREE
{
int v;
struct TREE *l;
struct TREE *r;
} tree;
extern tree *CreateTree();
extern CreateNodes(tree *curnode, int num1, int num2);
extern int FindNum(tree *tr, int* num);
extern int fReadNumber(FILE *ftemp);
int sign=0;
tree *CreateTree()
{
tree *node[64];
int j=0,arrnum[64]={0},n=0,k=1;
FILE *fnum;
fnum=fopen("numbers.txt","r");
if (fnum==NULL) exit(-1);
while (1)
{
int temp=0;
temp=fReadNumber(fnum);
if (temp==EOF) break;
arrnum[n]=temp;
n++;
}
node[0]=new tree;
node[0]->value=arrnum[0];
for (int(i)=1;i<n;i++)
{
CreateNodes(node[j],arrnum[k++],arrnum[k++]);
node[i++]=node[j]->left;
node[i]=node[j]->right;
j++;
}
fclose(fnum);
return node[0];
}
CreateNodes(tree *curnode, int num1, int num2)
{
tree *newnode;
newnode=new tree;
newnode->value=num2;
newnode->left=NULL;
newnode->right=NULL;
curnode->left=newnode;
newnode=new tree;
newnode->value=num1;
newnode->left=NULL;
newnode->right=NULL;
curnode->right=newnode;
}
int FindNum(tree *tr, int* num)
{
if (tr->value==*num) sign=1;
if ((tr->left==NULL) || (tr->right==NULL)) return sign;
FindNum(tr->left,num);
FindNum(tr->right,num);
}
int fReadNumber(FILE *ftemp)
{
int value;
while (1)
{
value=getc(ftemp);
if (value==EOF) return value;
if ((value>=48) && (value<=57))
{
ungetc(value,ftemp);
fscanf(ftemp,"%d",&value);
return value;
}
}
}
void main()
{
tree *t;
FILE *fd1;
int arrnumd1[64]={0},i=0;
fd1=fopen("d1.txt","r");
if (fd1==NULL) exit(-1);
while (1)
{
int temp=0;
temp=fReadNumber(fd1);
if (temp==EOF) break;
arrnumd1[i]=temp;
i++;
}
fclose(fd1);
t=new tree;
t=CreateTree();
for (int(j)=0;j<i;j++)
{
int res=0;
sign=0;
res=FindNum(t,&arrnumd1[j]);
if (res==1) printf("%d\n",arrnumd1[j]);
}
}