二叉排序树 (合并)
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int Data;
struct Node *LChild;
struct Node *RChild;
int Ltag;
int Rtag;
}BSTNode,*PBSTNode;
void InsertBST(PBSTNode *bt,int key) //二叉排序树的插入
{
PBSTNode s;
if(key==-1)
return; //反正NULL已经赋了,见到-1就return,其实-1不写,代码也可正常运行
if(*bt==NULL)
{
s=(PBSTNode)malloc(sizeof(BSTNode));
s->Data=key;
s->LChild=NULL;
s->RChild=NULL;
*bt=s;
}
else if(key<(*bt)->Data)
InsertBST(&((*bt)->LChild),key);
else if(key>(*bt)->Data)
InsertBST(&((*bt)->RChild),key);
return;
}
void MergeBST(PBSTNode *bt) //二叉排序树的合并
{
int key;
char str;
do
{
scanf("%d%c",&key,&str);
InsertBST(bt,key);
}
while(str!='\n');
}
void CreateBST(PBSTNode *bt) //二叉排序树的创建
{
int key;
char str;
(*bt)=NULL; //=NULL这里是创建与合并的区别
do
{
scanf("%d%c",&key,&str);
InsertBST(bt,key);
}
while(str!='\n');
}
void InPrint(PBSTNode bt) //中序遍历输出
{
if(bt!=NULL)
{
InPrint(bt->LChild);
printf("%d ",bt->Data);
InPrint(bt->RChild);
}
}
int main()
{
PBSTNode bt;
CreateBST(&bt);
MergeBST(&bt);
InPrint(bt);
printf("\n");
return 0;
}