; #include<>#define NUM 7 //宏定义int i; //变量类型定义typedef struct Node{ int data ; //数据域 struct Node *next; //指针域}Node,*LNode; //用结构体构造结点及相应的指针typedef struct Tree{ int data ; struct Tree *left ; struct Tree *right ; }Tree,*LTree ; //用结构体构造树及相应的指针 CreateList( LNode Head ) //创建单链表 { for(int i=1 ; i <=NUM ; i++) //创建循环,依次输入NUM个数据{ LNode temp ; //中间结点temp = (LNode) malloc( sizeof( Node ) ); //动态存储分配 temp-> next = NULL; //中间结点初始化scanf("%2d",&temp-> data); //输入赋值到结点temp数据域 temp-> next = Head-> next ; Head-> next = temp ; //将temp结点插入链表} return 1 ;//返回1} InsertSqTree( LTree &root , LNode temp ) //二叉树排序原则的设定{ if(!root) //root为NULL时执行{ root = (LTree)malloc(sizeof(Tree)); //动态存储分配 root-> left =NULL; root-> right=NULL; //初始化root-> data = temp-> data ; //赋值插入return 1 ; //函数正常执行,返回1} else { if(root-> data>= temp-> data) return InsertSqTree( root-> left , temp ) ; //比较插入左子树else if(root-> data data) return InsertSqTree( root-> right , temp ); //比较插入右子树} return 1 ; //如果满足,就不做处理,返回1} void BianLiTree(LTree root) //采用中序遍历,实现将所有数字按从左向右递增的顺序排序{ if(root) //root不为空执行{BianLiTree(root-> left); //左递归处理至叶子结点,当root-> left为NULL时不执行printf("%4d ",root-> data); //输出BianLiTree(root-> right); //处理右结点}} int main() { LNode Head = NULL; LTree root = NULL ; //初始化Head = (LNode) malloc(sizeof(Node)); //动态存储分配Head-> next = NULL ; //初始化printf("please input numbers:\n");//输入提示语句if(!CreateList( Head )) //建单链表成功返回1不执行下一语句return 0; //结束函数,返回0LNode temp = Head-> next ; //将头指针的指针域赋值予中间结点while( temp ) //temp为NULL时停止执行{ if(!InsertSqTree( root ,temp )) //排序正常执行,返回1不执行下一语句return 0 ; //结束函数,返回0Head-> next = temp-> next ; //将中间指针的指针域赋值予头结点指针域free(temp); //释放空间temp = Head-> next ; //将头指针的指针域赋值予中间结点,以上三句实现了temp指针后移} printf("the result is:\n");//输出提示语句BianLiTree(root); //采用中序遍历,输出并观察树结点 return 1; //函数正常结,返回1}