二叉排序树BST
二叉排序树BST 原则就是小的话接左边,大的话接右边,必须说的是效率太低主要是刚开始理解错了不需要再写什么Creat函数的,直接搜着插着就能进行
#include<stdio.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define NULL 0
typedef int ElemType;
typedef int Status;
typedef int KepType;
typedef struct BiTNode{
ElemType data;
struct BiTNode * lchild, * rchild;
}BiTNode, * BiTree;
Status SearchBST(BiTree T, int key, BiTree f, BiTree &p){
//此次查找是为Insert做准备
//在根指针T所指的二叉树中递归地查找其关键字等于key的数据元素,若成功,
// 则指针p指向该数据元素结点,并返回TRUE,否则指针p指向查找路径上访问的
//最后一个结点并返回FALSE,指针f指向T的双亲,其初始调用值为NULL
if(!T)
{
p=f;
return FALSE;
} //查找不成功
else if (key==T->data)
{
p=T;
return TRUE;
} //查找成功
else if(key < T->data) return SearchBST(T->lchild, key, T, p); //在左子树中继续查找
else if(key > T->data) return SearchBST(T->rchild, key, T, p); //在右子树中继续查找
}
Status InsertBST(BiTree &T, ElemType e){
//当二叉排序树T中不存在关键字等于e的数据元素时,插入e并返回TRUE,否则返回FALSE
BiTree p=NULL;
if(!SearchBST(T, e, NULL, p))
{
BiTree s;
s=(BiTree)malloc(sizeof(BiTNode));
s->data = e;
s->lchild = s->rchild = NULL;
if(!p) T = s; //被插结点*s为新的根结点
else if(e < p->data) p->lchild = s;
else if(e > p->data) p->rchild = s;
return TRUE;
}
else return FALSE;
}
Status DeleteBST(BiTree &p){
//从二叉排序树中删除结点p,并重接它的左或右子树
BiTree q;
if(!p->rchild) //右子树空则只用接左子树
{
q=p;
p=p->lchild;
free(q);
}
else if(!p->lchild) //左子树空则只用接右子树
{
q=p;
p=p->rchild;
free(q);
}
else //左右均不空
{
BiTree s;
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;
}
return OK;
}
Status InOrderTraverse(BiTree T) //中序递归遍历
{
if(T)
{
InOrderTraverse(T->lchild);
printf("%d ",T->data);
InOrderTraverse(T->rchild);
}
return OK;
}
int main()
{
BiTree T=NULL;
int e;
int num;
printf("输入初始的结点数:\n");
scanf("%d", &num);
while(num--)
{
scanf("%d",&e);
InsertBST(T,e);
}
InOrderTraverse(T);
printf("\n");
printf("输入要插入的数据个数:\n");
scanf("%d", &num);
while(num--)
{
scanf("%d", &e);
InsertBST(T,e);
}
InOrderTraverse(T);
printf("\n");
DeleteBST(T);
InOrderTraverse(T);
printf("\n");
return 0;
}
posted on 2011-12-01 23:33 java课程设计例子 阅读(427) 评论(0) 编辑 收藏 举报