?? 030300726_2.cpp
字號:
#include <iostream>
#include <fstream>
using namespace std;
int m=1;
typedef struct BiTNode
{
int data;
int sign;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//
void find(BiTree &t,int r,BiTree &p)
{
if(t->data==r){p=t;m=0; return ;}
if(m==1&&t->sign==1&&t->lchild!=NULL){ find(t->lchild,r,p);}
if(m==1&&t->sign==1&&t->rchild!=NULL){ find(t->rchild,r,p);}
m=1;
return;
}
//
void Create(BiTree &t,int root,int ldata,int rdata)
{
BiTree p=NULL;
if(t==NULL){t=(BiTNode *)malloc(sizeof(BiTNode)); p=t ;}
else
{
p=t;
find(t,root,p);
}
if(p!=NULL) {
p->data=root;
if(ldata==0)p->lchild=NULL;
else{
p->lchild=(BiTNode *)malloc(sizeof(BiTNode));
p->lchild->data=ldata;
}
if(rdata==0)p->rchild=NULL;
else{
p->rchild=(BiTNode *)malloc(sizeof(BiTNode));
p->rchild->data=rdata;
}
}
p->sign=1;
}
//
void PreOrder(BiTree t,int a[],int NUMBER)
{
for(int i=0;i<NUMBER&&a[i]!=0;++i);
a[i]=t->data;
if(t->lchild!=NULL) PreOrder(t->lchild,a,NUMBER);
if(t->rchild!=NULL) PreOrder(t->rchild,a,NUMBER);
return;
}
//
void InOrder(BiTree t,int a[],int NUMBER)
{
if(t->lchild!=NULL) InOrder(t->lchild,a,NUMBER);
for(int i=0;i<NUMBER&&a[i]!=0;++i);
a[i]=t->data;
if(t->rchild!=NULL) InOrder(t->rchild,a,NUMBER);
return;
}
void postOrder(BiTree t,int a[],int NUMBER)
{
if(t->lchild!=NULL) postOrder(t->lchild,a,NUMBER);
if(t->rchild!=NULL) postOrder(t->rchild,a,NUMBER);
for(int i=0;i<NUMBER&&a[i]!=0;++i);
a[i]=t->data;
return;
}
int depth(BiTree t){
int dep1,dep2;
//若T為空樹,則深度為0,否則其深度等于左子樹或右子樹的最大深度加1
if (t==NULL) return 0;
else {dep1=depth(t->lchild);
dep2=depth(t->rchild);
return dep1>dep2?dep1+1:dep2+1;
}
}
//
void main()
{
ifstream in("input.txt");
if(in.fail())
{
cerr<<"the input is not exist!"<<endl;
return ;
}
ofstream out("output.txt");
int num1;
BiTree t1=NULL;
in>>num1;
int root1,ldata1,rdata1;
for(int i=0;i<num1;i++)
{
in>>root1>>ldata1>>rdata1;
Create(t1,root1,ldata1,rdata1);
}
int *a=new int[3*num1];
int *b=new int[3*num1];
int *c=new int[3*num1];
for(i=0;i<3*num1;i++)
a[i]=b[i]=c[i]=0;
int y=depth(t1);
out<<y<<endl;
PreOrder(t1,a,3*num1);
for( i=0;i<num1;i++)
out<<a[i]<<" ";
out<<endl;
InOrder(t1,b,3*num1);//中序遍歷
for( i=0;i<num1;i++)
out<<b[i]<<" ";
out<<endl;
postOrder(t1,c,3*num1);
for( i=0;i<num1;i++)
out<<c[i]<<" ";
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -