该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include "stdio.h"
typedef struct BiTNode
{
char data;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTNode;
BiTNode *root = NULL; /* maple_zhj:声明为NULL */
int nCountNode = 0;
BiTNode *Creat(int n)
{
void Insert(BiTNode **BST,int x);
int x;
int i;
BiTNode *BST = NULL;
for(i=1;i <=n;i++)
{
printf(" 第i 个:");
scanf("%c",&x);
BST=root; /* /maple_zhj:加上这行,用于保存 头指针地址 */
Insert(&BST,x); /* //maple_zhj: &BST 传入 指针的内存地址 */
}
return BST;
}
void Insert(BiTNode **BST,int x)
{
BiTNode *p;
if(*BST == NULL)
{
*p = BiTNode;
p->data = x;
p->lchild = NULL;
p->rchild = NULL;
*BST = p;
if(root==NULL) /* maple_zhj:如果头指针是空 */
root = *BST; /* 则第一次创建的结构体的地址 赋值给 头指针 */
}
else if((*BST)->data >= x) /* maple_zhj:二级指针 取一次值,变为一级指针,再取 结构体中的Data */
{
Insert(&((*BST)->lchild),x); /* maple_zhj:二级转一级指针,取到左儿子, */
/* maple_zhj:再将左儿子指针地址 作为参数传入 */
}
else
{
Insert(&((*BST)->rchild),x); /* maple_zhj:二级转一级指针,取到左儿子, */
/* maple_zhj:再将左儿子指针地址 作为参数传入 */
}
}
void MidOrder(BiTNode *BST)
{
if(BST!=NULL)
{
MidOrder(BST->lchild); /* maple_zhj: 左递归 */
printf ("%c",BST->data); /* 输出 */
MidOrder(BST->rchild); /* maple_zhj: 右递归 */
}
}
void main()
{
printf ("请输入结点数目:" );
scanf("%c",nCountNode);
printf ("请输入nCountNode个结点" );
root = Creat(nCountNode);
printf ("中序遍历:" );
MidOrder(root);
getch();
}