二叉排序树的创建与查找c语言,二叉查找树(二叉排序树)(C语言)

#include#include"fatal.h"

structTreeNode;

typedefstruct TreeNode *Position;

typedefstruct TreeNode *SearchTree;

typedefintElementType;

SearchTree MakeEmpty(SearchTree T);

Position Find(ElementType X,SearchTree T);

Position FindMin(SearchTree T);

Position FindMax(SearchTree T);

SearchTree Insert(ElementType X,SearchTree T);

SearchTree Delete(ElementType X,SearchTree T);

ElementType Retrieve(Position P);structTreeNode

{

ElementType Element;

SearchTree left;

SearchTree right;

};

SearchTree MakeEmpty(SearchTree T)

{if(T!=NULL)

{

MakeEmpty(T->left);

MakeEmpty(T->right);

free(T);

}returnNULL;

}

Position Find(ElementType X,SearchTree T)

{if(T==NULL)returnNULL;if(XElement)return Find(X,T->left);else if(X>T->Element)return Find(X,T->right);else

returnT;

}

Position FindMin(SearchTree T)

{if(T==NULL)returnNULL;if(T->left==NULL)returnT;else

return FindMin(T->left);

}

Position FindMax(SearchTree T)

{if(T==NULL)returnNULL;else if(T->right==NULL)returnT;else

return FindMax(T->right);

}

SearchTree Insert(ElementType X,SearchTree T)

{if(T==NULL)

{

T=malloc(sizeof(structTreeNode));if(T==NULL)

FatalError("Out of space!!!");else{

T->Element=X;

T->left=T->right=NULL;

}

}else if(XElement)

T->left=Insert(X,T->left);else if(X>T->Element)

T->right=Insert(X,T->right);returnT;

}

SearchTree Delete(ElementType X,SearchTree T)

{

Position TmpCell;if(T==NULL)

Error("Error not found");else if(XElement)

T->left=Delete(X,T->left);else if(X>T->Element)

T->right=Delete(X,T->right);else if(T->left&&T->right)

{

TmpCell=FindMin(T->right);

T->Element=TmpCell->Element;

T->right=Delete(X,T->right);

}else{

TmpCell=T;if(T->left==NULL)

T=T->right;else if(T->right=NULL)

T=T->left;

free(TmpCell);

}returnT;

}

ElementType Retrieve(Position P)

{if(P==NULL)return -1;else

return P->Element;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值