先序中序建立二叉树Word文件下载.docx

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

先序中序建立二叉树Word文件下载.docx

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

先序中序建立二叉树Word文件下载.docx

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;

k=Search(ino,pre[ps]);

/*在中序序列中查询*/

if(k==-1){T=NULL;

puts("

错误!

\n"

);

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

if(T==NULL)exit

(1);

T->

data=pre[ps];

if(k==is)T->

lchild=NULL;

CrtBT(T->

lchild,pre,ino,ps+1,is,k-is);

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

rchild=NULL;

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);

rchild);

voidmain()

charpre[size],ino[size];

intps,is,n;

BiTree*T=NULL;

enter:

"

scanf("

%s"

pre);

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

left=Rebuild(vlr+1,lvr,k);

//Buildlefttree

right=Rebuild(vlr+1+k,lvr+k+1,n-k-1);

//Buildrighttree

}

returntemp;

malloc.h>

#defineMaxSize100

typedefcharElemType;

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

DataTypedata;

structBiTNode*lchild,*rchild;

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];

//根节点

lch=NULL;

rch=NULL;

i=0;

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

while(i<

len)

if(inorder==pre[0])

break;

i++;

p=pre+1;

//确定左子树的先序序列指针

q=inorder;

//确定左子树的中序序列指针

lch=trans(p,q,i);

//递归生成左子树

p=pre+i+1;

//确定右子树的先序序列指针

q=inorder+i+1;

//确定右子树的中序序列指针

rch=trans(p,q,len-i-1);

//递归生成右子树

returnroot;

}

intSearch(charino[],charch[])

while(ino!

if(ino==ch)

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

{intk;

k=Search(ino,pre);

if(k==-1){T=NULL;

error!

else

{

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

if(T==NULL)exit

(1);

T->

if(k==is)T->

else

CrtBT(T->

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

}

voidpostorder(BiTree*t)

//puts("

typedefstructBTNode

structBTNode*lchild,*rchild;

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

BiTree*s;

char*p;

intk;

if(n<

returnNULL;

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

s->

data=*pre;

for(p=in;

p<

in+n;

p++)

if(*p-=*pre)

break;

k=p-in;

s->

lchind=CreateBT1(pre+1,in,k)

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

returns;

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

当前位置:首页 > 成人教育 > 专升本

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

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