二叉查找树

来源:互联网 发布:手机淘宝评价管理 编辑:程序博客网 时间:2024/06/16 20:23

使得二叉树成为二叉查找树的关键就是令树中的每个节点的左子树的关键值小于X的关键值,它的右子树中所有的关键字大于X的关键字。
本文主要介绍二叉查找树的实现和基本的插入和删除操作
头文件声明如下

#ifndef ADT_H_#define ADT_H_struct ADT;typedef struct ADT *ADtree;typedef struct ADT *Position;//查找函数,查找某个元素的所在节点的地址Position Find(ADtree t,int X);//查找最大值,最小值函数,查找最大值和最小值所在节点的地址Position Findmax(ADtree t);Position Findmin(ADtree t);//插入函数,插入一个节点ADtree Insert(ADtree t,int X);//删除函数,删除一个节点ADtree Delete(ADtree t,int X);#endif // ADT_H_

二叉查找树的定义以及基本操作的定义

#include <stdio.h>#include <stdlib.h>#include "main.h"struct ADT{  int element;  Position left;  Position right;};//查找函数,查找某个元素的所在节点的地址Position Find(ADtree t,int X){    if(t==NULL)        return NULL;    else    {        Position tem=t;        while(tem!=NULL)        {          if(X<tem->element)            tem=tem->left;          if(X>tem->element)            tem=tem->right;          if(X==tem->element)            return tem;        }        if(tem==NULL)          return NULL;    }}//查找最大值,最小值函数,查找最大值和最小值所在节点的地址Position Findmax(ADtree t){    if(t==NULL)        return NULL;    if(t->right==NULL)        return t;    else        return Findmax(t->right);}Position Findmin(ADtree t){    if(t==NULL)        return NULL;    if(t->left==NULL)        return t;    else        return Findmin(t->left);}//插入函数,插入一个节点ADtree Insert(ADtree t,int X){  if(t==NULL)  {    t=malloc(sizeof(struct ADT));    t->left=NULL;    t->right=NULL;    t->element=X;    printf("insert success\n");  }  else  {  Position p_tem=t;  if(X>p_tem->element)  {      t->right=Insert(p_tem->right,X);  }  if(X<p_tem->element)  {      t->left=Insert(p_tem->left,X);  }  }  return t;}//遍历树void print(Position p,int dep){    if(p!=NULL)    {       int i=0;       for(;i<dep;i++)         printf("    ");         printf("%d\n",p->element);    }}void traverse(ADtree t,int d){    if(t!=NULL)    {        print(t,d);        traverse(t->left,d+1);        traverse(t->right,d+1);    }}//删除函数,删除一个节点ADtree Delete(ADtree t,int X){    if(t==NULL)        return t;    else    {        if(X>t->element)            t->right=Delete(t->right,X);        if(X<t->element)            t->left=Delete(t->left,X);        if(X==t->element)        {            if(t->left!=NULL&&t->right!=NULL)        {            Position p_tem=Findmin(t->right);            t->element=p_tem->element;            t->right=Delete(t->right,p_tem->element);        }           else           {               Position p=t;               if(p->left==NULL)               {                 t=t->right;                 free(p);               }               else if(p->right==NULL)               {                t=t->left;                free(p);               }            }        }     return t;    }}
0 0
原创粉丝点击