数据结构关于二叉树建立及遍历(用C语言)
编写一个主函数,实现以下函数的所有功能 。。。可按如下格式定义二叉树的链式存储结构:
typedef struct btreenode
{datatype data;
struct btreenode *lchild;
struct btreenode *rchild;
}bnode;
模块划分:(1)creat( )函数:建立只有根结点的二叉树
(2)insertL ( )函数:结点作为左孩子插入二叉树
(3)insertR ( )函数:结点作为右孩子插入二叉树
(4)preorder ( )函数:前序遍历
(5)inorder ( )函数:中序遍历
(6)postorder( )函数:后续遍历
bnode *create(datatype x, bnode *lbt, bnode *rbt)
{ bnode *p;
if((p=( bnode * )malloc(sizeof(bnode)))==NULL)
return NULL;
p->data=x;
p->lchild=lbt;
p->rchild=rbt;
return p; }
/*结点作为左孩子插入二叉树*/
bnode *insertL(datatype x, bnode *Parent)
{ bnode *p;
if((p=( bnode * )malloc(sizeof(bnode)))==NULL)
return NULL;
p->data=x;
p->lchild=NULL;
p->rchild=NULL;
Parent->lchild=p;
return p; }
/*结点作为右孩子插入二叉树*/
bnode *insertR(datatype x, bnode *Parent)
{ bnode *p;
if((p=( bnode * )malloc(sizeof(bnode)))==NULL)
return NULL;
p->data=x;
p->lchild=NULL;
p->rchild=NULL;
Parent->rchild=p;
return p; }
/*前序遍历*/
void preorder(bnode *bt)
{ printf(" %d ",bt->data);
if(bt->lchild!=NULL) preorder(bt->lchild);
if(bt->rchild!=NULL) preorder(bt->rchild); }
/*中序遍历*/
void inorder(bnode *bt)
{ if(bt->lchild!=NULL) inorder(bt->lchild);
printf(" %d ",bt->data);
if(bt->rchild!=NULL) inorder(bt->rchild); }
/*后序遍历*/
void postorder(bnode *bt)
{ if(bt->lchild!=NULL) postorder(bt->lchild);
if(bt->rchild!=NULL) postorder(bt->rchild);
printf(" %d ",bt->data); }
其实是C的问题,我的指针学的不太好,高手指教/