先序中序建立二叉树.docx

上传人:b****6 文档编号:5749450 上传时间:2022-12-31 格式:DOCX 页数:11 大小:85.50KB
下载 相关 举报
先序中序建立二叉树.docx_第1页
第1页 / 共11页
先序中序建立二叉树.docx_第2页
第2页 / 共11页
先序中序建立二叉树.docx_第3页
第3页 / 共11页
先序中序建立二叉树.docx_第4页
第4页 / 共11页
先序中序建立二叉树.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

先序中序建立二叉树.docx

《先序中序建立二叉树.docx》由会员分享,可在线阅读,更多相关《先序中序建立二叉树.docx(11页珍藏版)》请在冰豆网上搜索。

先序中序建立二叉树.docx

先序中序建立二叉树

先序中序建立二叉树急~~

1二叉树中存储的数据范围仅限于26个英文字母

2程序要提示用户从键盘分别输入二叉树的先序和中序序列,接受输入后,调用相应的函数完成二叉树的创建

3成功创建二叉树后,程序自动输出该二叉树的后序遍历次序

#include

#include

#include

#definesize100

typedefstructJD

{

chardata;

structJD*lchild,*rchild;

}BiTree;

intSearch(charino[],charch)

{

inti=0;

//puts(ino)

while(ino!

=ch&&ino)

i++;

if(ino==ch)

returni;

else

return-1;

}

voidCrtBT(BiTree*T,charpre[],charino[],intps,intis,intn)/*已知pre[ps..ps+n-1]为二叉树的先序序列,ino[is..is+n-1]为二叉树的中序序列,本算法由此两个序列构造二叉链表*/

{

intk;

if(n==0)T=NULL;

else

{

k=Search(ino,pre[ps]);/*在中序序列中查询*/

if(k==-1){T=NULL;puts("错误!

\n");}

else

{

T=(BiTree*)malloc(sizeof(BiTree));

if(T==NULL)exit

(1);

T->data=pre[ps];

if(k==is)T->lchild=NULL;

else

CrtBT(T->lchild,pre,ino,ps+1,is,k-is);

if(k=is+n-1)T->rchild=NULL;

else

CrtBT(T->rchild,pre,ino,ps+1+(k-is),k+1,n-(k-is)-1);

}

}

}/*endCrtBT*/

voidpostorder(BiTree*t)//递归先序遍历

{

if(t!

=NULL)

{printf("%c\t",t->data);

postorder(t->lchild);

postorder(t->rchild);

}

}

voidmain()

{

charpre[size],ino[size];

intps,is,n;

BiTree*T=NULL;

puts("enter:

");

scanf("%s",pre);

scanf("%s",ino);

CrtBT(T,pre,ino,0,0,strlen(pre));

postorder(T);

getchar();

}

本贴来自ZDNetChina中文社区,本贴地址:

//Rebuildabinarytree

//vlr:

preordersequence

//lvr:

inordersequence

//numberofnode

BinTreeNode*Rebuild(char*vlr,char*lvr,intn)

{

if(n==0)

returnNULL;

//Findrootininordersequence

intk=0;

while(lvr[k]!

=vlr[0])

k++;

BinTreeNode*temp=newBinTreeNode();

if(lvr[k]=='#')//leafnode

temp=NULL;

else

{

temp->data=lvr[k];//Buildroot

temp->left=Rebuild(vlr+1,lvr,k);//Buildlefttree

temp->right=Rebuild(vlr+1+k,lvr+k+1,n-k-1);//Buildrighttree

}

returntemp;

}

#include

#include

#defineMaxSize100

typedefcharElemType;

typedefstructBiTNode/*二叉链表数据结构定义*/

{

DataTypedata;

structBiTNode*lchild,*rchild;

}BiTree;

#include

#include

#defineMaxSize100

typedefcharElemType;

typedefstructnode

{

ElemTypedata;

structnode*lchild;

structnode*rchild;

}BTree;

BTreenode(char*pre,char*inorder,intlen)

{

char*p,*q;

BTreeroot;

inti;

if(len<=0)

returnNULL;

root=(BTree)malloc(sizeof(BNode));

root->data=pre[0];//根节点

root->lch=NULL;

root->rch=NULL;

i=0;//i表示根节点在中序中的位置

while(i

{

if(inorder==pre[0])

break;

i++;

}

p=pre+1;//确定左子树的先序序列指针

q=inorder;//确定左子树的中序序列指针

root->lch=trans(p,q,i);//递归生成左子树

p=pre+i+1;//确定右子树的先序序列指针

q=inorder+i+1;//确定右子树的中序序列指针

root->rch=trans(p,q,len-i-1);//递归生成右子树

returnroot;

}

#include

#include

#include

#definesize100

typedefstructJD

{

chardata;

structJD*lchild,*rchild;

}BiTree;

intSearch(charino[],charch[])

{

inti=0;

//puts(ino)

while(ino!

=ch&&ino)

i++;

if(ino==ch)

returni;

else

return-1;

}

voidCrtBT(BiTree*T,charpre[],charino[],intps,intis,intn)

{intk;

if(n==0)T=NULL;

else

{

k=Search(ino,pre);

if(k==-1){T=NULL;puts("error!

\n");}

else

{

T=(BiTree*)malloc(sizeof(BiTree));

if(T==NULL)exit

(1);

T->data=pre[ps];

if(k==is)T->lchild=NULL;

else

CrtBT(T->lchild,pre,ino,ps+1,is,k-is);

if(k=is+n-1)T->rchild=NULL;

else

CrtBT(T->rchild,pre,ino,ps+1+(k-is),k+1,n-(k-is)-1);

}

}

}

voidpostorder(BiTree*t)

{

if(t!

=NULL)

{printf("%c\t",t->data);

postorder(t->lchild);

postorder(t->rchild);

}

}

voidmain()

{

charpre[size],ino[size];

intps,is,n;

BiTree*T=NULL;

//puts("enter:

");

scanf("%s",pre);

scanf("%s",ino);

CrtBT(T,pre,ino,0,0,strlen(pre));

postorder(T);

getchar();

}

#include

#include

#defineMaxSize100

typedefcharElemType;

typedefstructBTNode

{

DataTypedata;

structBTNode*lchild,*rchild;

}BiTree;

BiTree*CreateBT1(char*pre,char*in,intn)

{

BiTree*s;

char*p;

intk;

if(n<=0)

returnNULL;

s=(BiTree*)malloc(sizeof(BiTree));

s->data=*pre;

for(p=in;p

if(*p-=*pre)

break;

k=p-in;

s->lchind=CreateBT1(pre+1,in,k)

s->rchild=CreateBT1(pre+k+1,p+1,n-k-1);

returns;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1