1.带空指针的先根序列,空指针用#表示。
void BuildTree(BiTree&root){
int ch;
scanf("%c",&ch);
if(ch=='#'){
root=NULL;
return ;
}else{
root=new PUF;
root->data=ch-'0';
BuildTree(root->left);
BuildTree(root->right);
}
}
2.先根序列和中根序列
void Create(BiTree &T,int *pre,int *in,int n)//pre,in为左右子树遍历序列的开始下标
{
if(n<=0||!pre||!in){T=NULL;return ;}
T=new BiTNode;
T->data=*pre;//先根的第一个元素一定为根
int *p;
for(p=in;p<in+n;p++)
if(*p==*pre)break;
int k = p-in;//找到中根序列中根的所在位置,进而通过序列下标确定左子树和右子树的遍历序列长度
Create(T->lchild,pre+1,in,k);//
Create(T->rchild,pre+k+1,in+k+1,n-k-1);//关键点,开始下标以及长度务必确定好
}
3.中根序列和后根序列
void Create(BiTree &T,int *post,int *in,int n)
{
if(n<=0||post==NULL||in==NULL){T= NULL;return ;}
T = new BiTNode;
T->data=*(post+n-1);
int *p;
for(p=in;p<in+n;p++)
{
if(*p==*(post+n-1))break;
}
int k=p-in;
Create(T->lchild,post,in,k);
Create(T->rchild,post+k,in+k+1,n-k-1);
}
暂时就这些,日后再补充。