
有关二叉树的问题,帮忙看一下代码 根据先根和中根确定二叉树,并求出其后根次序的周游 10
代码贴在这里(还没有完成),好像是在某一个if之后突然就错乱了感激不尽!#include<iostream>#include<string.h>usingnamespac...
代码贴在这里(还没有完成),好像是在某一个if之后突然就错乱了
感激不尽!
#include<iostream>
#include<string.h>
using namespace std;
struct bintreenode;
typedef struct bintreenode * pbintreenode;
struct bintreenode{
char * info;int h;pbintreenode llink;pbintreenode rlink;pbintreenode flink;
};
pbintreenode newbintree()
{
pbintreenode ptree;
ptree=(pbintreenode)malloc(sizeof(struct bintreenode));
if(ptree!=NULL)
{ptree->info=NULL;ptree->h=0;ptree->llink=NULL;ptree->rlink=NULL;}
else cout<<"new error!!"<<endl;
return ptree;
}
void divtree(pbintreenode ptree,char *pre){
cout<<"start"<<endl;
char s1[10],s2[10];int i=0;
while(ptree->info[i]!=*pre&&i<=strlen(ptree->info)){i++;}
if(i>=strlen(ptree->info)){cout<<"back"<<" ";divtree(ptree->flink,pre);}
cout<<" "<<i<<" ";
if(i>0){for(int j=0;j<i;j++){s1[j]=ptree->info[j];}}
s1[i]='\0';
int k=0;int l=i+1;
while(ptree->info[l]!='\0')
{
s2[k]=ptree->info[l];
k++;l++;
}
s2[k]='\0';
if(s1!='\0')
{
pbintreenode pltree;
pltree=(pbintreenode)malloc(sizeof(struct bintreenode));
pltree->info=NULL;pltree->llink=NULL;pltree->rlink=NULL;
ptree->llink=pltree;
pltree->flink=ptree;
pltree->h=ptree->h+1;
}
ptree->llink->info=s1;cout<<" l "<<ptree->llink->info;
if(s2!='\0')
{
pbintreenode prtree;
prtree=(pbintreenode)malloc(sizeof(struct bintreenode));
prtree->info=NULL;prtree->llink=NULL;prtree->rlink=NULL;
ptree->rlink=prtree;
prtree->flink=ptree;
prtree->h=ptree->h+1;
}
ptree->rlink->info=s2;cout<<" r "<<ptree->rlink->info;
char s[2];
s[0]=*pre;s[1]='\0';
ptree->info=s;
cout<<" info "<<ptree->info<<endl;
pre++;
if(ptree->llink!=NULL&&strlen(ptree->llink->info)==1)
{cout<<" innerl1 "<<pre<<" "<<ptree->info<<" "<<ptree->llink-info<<" ";char sl[2];sl[0]=*pre;sl[1]='\0';
if(*(ptree->llink->info)==*sl)
{pre++;cout<<" ++ "<<pre<<endl;}
}
cout<<pre<<" "<<ptree->info<<endl;
if(ptree->llink!=NULL&&strlen(ptree->llink->info)>1)
{
cout<<" innerl "<<pre<<" "<<ptree->info<<" "<<ptree->llink->info<<endl;
divtree(ptree->llink,pre);
}
if(ptree->rlink!=NULL&&(strlen(ptree->rlink->info)==1))
{
cout<<" innerr1 "<<pre<<" "<<ptree->info<<" "<<ptree->rlink->info<<" ";
char sr[2];
sr[0]=*pre;sr[1]='\0';
if(*(ptree->rlink->info)==*sr){
pre++;
cout<<" ++ "<<pre<<" "<<strlen(ptree->rlink->info)<<endl;
}
}
cout<<pre<<" "<<ptree->info<<endl;
if(ptree->rlink!=NULL&&(strlen(ptree->rlink->info)>1))
{
cout<<" innerr "<<pre<<" "<<ptree->info<<" "<<ptree->rlink->info<<endl;
divtree(ptree->rlink,pre);
}
}
void postvisitbintree(pbintreenode ptree){
if(ptree->llink!=NULL){cout<<ptree->info<<endl;postvisitbintree(ptree->llink);}
else
{
if(ptree->rlink!=NULL){cout<<ptree->info<<endl;postvisitbintree(ptree->rlink);}
else
{
cout<<ptree->info<<" ";
}
}
}
int main(){
char *pre="ABDHIECFG";
char *mid="HDIBEAFCG";
pbintreenode T=newbintree();
T->info=mid;
divtree(T,pre);
postvisitbintree(T);
return 0;
} 展开
感激不尽!
#include<iostream>
#include<string.h>
using namespace std;
struct bintreenode;
typedef struct bintreenode * pbintreenode;
struct bintreenode{
char * info;int h;pbintreenode llink;pbintreenode rlink;pbintreenode flink;
};
pbintreenode newbintree()
{
pbintreenode ptree;
ptree=(pbintreenode)malloc(sizeof(struct bintreenode));
if(ptree!=NULL)
{ptree->info=NULL;ptree->h=0;ptree->llink=NULL;ptree->rlink=NULL;}
else cout<<"new error!!"<<endl;
return ptree;
}
void divtree(pbintreenode ptree,char *pre){
cout<<"start"<<endl;
char s1[10],s2[10];int i=0;
while(ptree->info[i]!=*pre&&i<=strlen(ptree->info)){i++;}
if(i>=strlen(ptree->info)){cout<<"back"<<" ";divtree(ptree->flink,pre);}
cout<<" "<<i<<" ";
if(i>0){for(int j=0;j<i;j++){s1[j]=ptree->info[j];}}
s1[i]='\0';
int k=0;int l=i+1;
while(ptree->info[l]!='\0')
{
s2[k]=ptree->info[l];
k++;l++;
}
s2[k]='\0';
if(s1!='\0')
{
pbintreenode pltree;
pltree=(pbintreenode)malloc(sizeof(struct bintreenode));
pltree->info=NULL;pltree->llink=NULL;pltree->rlink=NULL;
ptree->llink=pltree;
pltree->flink=ptree;
pltree->h=ptree->h+1;
}
ptree->llink->info=s1;cout<<" l "<<ptree->llink->info;
if(s2!='\0')
{
pbintreenode prtree;
prtree=(pbintreenode)malloc(sizeof(struct bintreenode));
prtree->info=NULL;prtree->llink=NULL;prtree->rlink=NULL;
ptree->rlink=prtree;
prtree->flink=ptree;
prtree->h=ptree->h+1;
}
ptree->rlink->info=s2;cout<<" r "<<ptree->rlink->info;
char s[2];
s[0]=*pre;s[1]='\0';
ptree->info=s;
cout<<" info "<<ptree->info<<endl;
pre++;
if(ptree->llink!=NULL&&strlen(ptree->llink->info)==1)
{cout<<" innerl1 "<<pre<<" "<<ptree->info<<" "<<ptree->llink-info<<" ";char sl[2];sl[0]=*pre;sl[1]='\0';
if(*(ptree->llink->info)==*sl)
{pre++;cout<<" ++ "<<pre<<endl;}
}
cout<<pre<<" "<<ptree->info<<endl;
if(ptree->llink!=NULL&&strlen(ptree->llink->info)>1)
{
cout<<" innerl "<<pre<<" "<<ptree->info<<" "<<ptree->llink->info<<endl;
divtree(ptree->llink,pre);
}
if(ptree->rlink!=NULL&&(strlen(ptree->rlink->info)==1))
{
cout<<" innerr1 "<<pre<<" "<<ptree->info<<" "<<ptree->rlink->info<<" ";
char sr[2];
sr[0]=*pre;sr[1]='\0';
if(*(ptree->rlink->info)==*sr){
pre++;
cout<<" ++ "<<pre<<" "<<strlen(ptree->rlink->info)<<endl;
}
}
cout<<pre<<" "<<ptree->info<<endl;
if(ptree->rlink!=NULL&&(strlen(ptree->rlink->info)>1))
{
cout<<" innerr "<<pre<<" "<<ptree->info<<" "<<ptree->rlink->info<<endl;
divtree(ptree->rlink,pre);
}
}
void postvisitbintree(pbintreenode ptree){
if(ptree->llink!=NULL){cout<<ptree->info<<endl;postvisitbintree(ptree->llink);}
else
{
if(ptree->rlink!=NULL){cout<<ptree->info<<endl;postvisitbintree(ptree->rlink);}
else
{
cout<<ptree->info<<" ";
}
}
}
int main(){
char *pre="ABDHIECFG";
char *mid="HDIBEAFCG";
pbintreenode T=newbintree();
T->info=mid;
divtree(T,pre);
postvisitbintree(T);
return 0;
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询