自己编的:把二叉树顺序存储转换为链式存储后,先序遍历出错。
#include<stdio.h>#include<stdlib.h>
typedef struct node
{
node *lchild;
node *rchild;
char data;
}node1;
void lb(node *&q,char a[100],int n)
{
/*
printf("%c01");
node *q;
printf("%c02");
b=q; //b的孩子指向q
printf("%c03");
*/
//printf("%c",a[n]);
if(a[n]=='\0')
{
printf("__NULL04.."); //孩子结点不存在值的置为NULL
q=NULL;
}
else
{
printf("%c_\n",a[n]);
q=(node *)malloc(sizeof(node));
//q->lchild=q->rchild=NULL;
// printf("%c04");
q->data=a[n];
//b->lchild=
lb(q->lchild,a,2*n);
//printf("04_");
lb(q->rchild,a,2*n+1);
}
}
void fir(node *b)
{
if(b!=NULL)
{
printf("%c",b->data);
fir(b->lchild);
fir(b->rchild);
}
}
int main()
{
node1 *h,*p;
char a[100]={'a','a','b','c','d','e','f'};
p=(node *)malloc(sizeof(node));
// p->lchild=p->rchild=NULL;
p->data=a[1];
h=p;
printf("\n");
lb(p,a,1);
printf("\n");
h=h->lchild; //h是之前赋予的头结点,左孩子是乱码,照理说应该是'b'.
printf("\n%c",h->data);
fir(h); //用先序遍历。不返回任何数值,应该是abcdef.
}