⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 二叉顺序树.cpp

📁 提供完整的二叉树的设计文档
💻 CPP
字号:
#include<stdio.h>
#include<stdlib.h>
#define  MAXSIZE 100
#define OK 1
#define FALSE 0
#define  ElemType int

typedef  struct BSTNode
{
	ElemType data;
	struct BSTNode * lchild,* rchild;
}BSTNode,* BSTree;

int ElemList[MAXSIZE+1];

BSTree root=NULL;

void Init(int num)/*初始化*/
{
	ElemList[0]=num;
}

int EQ(int key,int data)
{
	if(key==data)
		return OK;
	else
		return FALSE;
}

int LT(int key,int data)
{
	if(key<data)
		return OK;
	else
		return FALSE;
}

int SearchBST(BSTree T, ElemType key,BSTree f,BSTree & p )
{
	 if(!T)
	 {
		 p=f;
		 return FALSE;
	 }
	 else if(EQ(key,T->data))
	 {
		 p=T;
		 return OK;
	 }
	 else if(LT(key,T->data))
		 SearchBST(T->lchild,key,T,p);
	 else
		 SearchBST(T->rchild,key,T,p);

}

int InsertBST(BSTree &T,ElemType e);

BSTree CreatBST(BSTree &T)
{
	int i;
	if(ElemList[0]==0)
		return NULL;
	else
	{
		for(i=1;i<=ElemList[0];i++)
		{
			InsertBST(T,ElemList[i]);
		}
	}
	return T;
}

int Delete(BSTree & p)
{
    BSTree q,s;
	if(!p->rchild)
	{
		q=p;
		p=p->lchild;
		free(q);
	}else if(!p->lchild)
	{
		q=p;
		p=p->rchild;
		free(q);
	}
	else{
		q=p;
		s=p->lchild;
		while(s->rchild)
		{
			q=s;
			s=s->rchild;
		}
		p->data=s->data;
		if(q!=p)
			q->rchild=s->lchild;
		else
			q->lchild=s->lchild;
		delete s;
	}
	return OK;
}



int DeleteBST(BSTree & T,ElemType key )
{
	if(!T)
		return FALSE;
	else
	{
		if(EQ(key,T->data))
		{
			Delete(T);
			return OK;
		}
		else if(LT(key,T->data))
			 DeleteBST(T->lchild,key);
		else
			 DeleteBST(T->rchild,key);
		return OK;
	}
}



int InsertBST(BSTree &T,ElemType e)
{
	BSTree s,p=NULL;
	if(!SearchBST(T,e,NULL,p))
	{
		s=(BSTree)malloc(sizeof(BSTNode));
	if(!s)
		return FALSE;
	s->data=e;
	s->lchild=s->rchild=NULL;
	if(!p)
		T=s;
	else if (LT(e,p->data))
		p->lchild=s;
	else
		p->rchild=s;
	return OK;
	}
	else return FALSE;
} 

void JudgeBST(ElemType data)
{
    BSTree p;
	if(SearchBST(root,data,NULL,p ))
		printf("含有所需要的数字\n");
	else
		printf("不含有所查找的数字\n");
}

void ClearBST(BSTree &T)
{
	if(!T)
		return ;
	else if(T->lchild==NULL&&T->rchild==NULL)
	{
		free(T);
		return ;
	}
	else
	{
		ClearBST(T->lchild);
		ClearBST(T->rchild);
		free(T);
	}

}
void TraverseBiTree(BSTree T)
{
	if(T)
	{
		TraverseBiTree(T->lchild);
		printf("%4d",T->data);
        TraverseBiTree(T->rchild);
	}
}
void main()
{
	int num,i,temp,choice;
	printf("请输入元素的个数\n");
	scanf("%d",&num);
	Init(num);
	printf("请输入元素\n");
	for(i=1;i<=num;i++)
		scanf("%d",&ElemList[i]);
	root=CreatBST(root);
	printf("*******************\n");
	TraverseBiTree(root);
	printf("\n");
	printf("*******************\n");
	do{
	printf("1插入一个元素 2 删除一个元素3 查找的整数 4 输出所有元素 else 退出\n");
	scanf("%d",&choice);
    if(choice==1)
	{
    printf("请输入插入元素\n");
    scanf("%d",&temp);
    InsertBST(root,temp);
    printf("****成功*****\n");
	}
	else if(choice==2)
	{
	printf("请输入删除元素\n");
	scanf("%d",&temp);
	DeleteBST(root,temp );
    printf("****删除成功****\n");
    }
	else if(choice==3)
	{
    printf("请输入查找元素\n");
    scanf("%d",&temp);
    JudgeBST(temp);
	}
	else if(choice==4)
	{
	 printf("*******************\n");
     TraverseBiTree(root);
	 printf("\n");
	 printf("*******************\n");
	}
	}while(choice==1||choice==2||choice==3||choice==4);
	ClearBST(root);
	printf("已经全部清空\n");
	
}
	


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -