#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef int Status;
typedef struct BiTNode
{
int data;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTNode,*BiTree;
Status InOrderTraverse(BiTree T){
if(!T)
{
return ERROR;}
InOrderTraverse(T->lchild);
printf("%d ",T->data);
InOrderTraverse(T->rchild);
}
BiTree insert_BiTree(int s,BiTree T)
{
BiTree p;
if(!T)
{
p=(BiTNode *)malloc(sizeof(BiTree));
p->data=s;
p->rchild=NULL;
p->lchild=NULL;
return p;
}
else if(s<T->data)
{
T->lchild=insert_BiTree(s,T->lchild);
}
else if (s>T->data)
{
T->rchild=insert_BiTree(s,T->rchild);
}
return T;
}
BiTree Create(BiTree T){
int data;
scanf("%d",&data);
}
int Delete(int m,BiTree &T){
BiTree s;
if (T==NULL)
{
printf("没有%d结点。",m);
return ERROR;}
else if(T->data==m)
{
if(T->lchild==NULL && T->rchild==NULL)
T=NULL;
else if (T->lchild!=NULL && T->rchild==NULL)
{
T=T->lchild;
}
else if (T->lchild==NULL && T->rchild!=NULL)
{
T=T->rchild;
}
else
{
s=T->lchild;
while(s->rchild)
{
s=s->rchild;
}
s->rchild=T->rchild;
T=T->lchild;
}
return OK;
}
else if(T->data<m)
{
return Delete(m,T->rchild);
}
else if(T->data>m)
{
return Delete(m,T->lchild);
}
}
int main(){
BiTree T;
int n,num[100],i=0,del;
scanf("%d",&n);
T=(BiTNode *)malloc(sizeof(BiTree));
T->lchild=T->rchild=NULL;
scanf("%d",&num[i]);
T->data=num[i];
for(i=1;i<n;i++)
{scanf("%d",&num[i]);
T=insert_BiTree(num[i],T);}
scanf("%d",&del);
printf("原始数据:");
for(i=0;i<n;i++)
printf("%d ",num[i]);
printf("\n");
printf("中序遍历结果:");
InOrderTraverse(T);
printf("\n");
printf("删除结点后结果:");
if(Delete(del,T))
InOrderTraverse(T);
printf("\n");
return OK;
}
二叉排序树
最新推荐文章于 2024-04-13 22:20:27 发布