二叉查找树

来源:互联网 发布:个人简历淘宝客服 编辑:程序博客网 时间:2024/06/06 18:34

1.最值

Position FindMin(BinTree BST)   //找最小值 {    if(BST) return NULL;    else if(!BST->Left)        return BST; //找到最左边    else        return FindMin(BST->Left); }Position FindMin(BinTree BST)   //找最大值 {    if(BST){        while(BST->Right){            BST = BST ->Right;        }        return BST;    }    return NULL;}

2查找x返回地址

//尾递归实现 Position Find(ElementType x,BinTree BST){    if(!BST) return NULL;    if(x>BST->Data)        return (x,BST->Right);    else if(x<BST->Data)        return (x,BST->Left);    else        return BST;}//迭代循环实现Position IterFind(ElementType x,BinTree BST){    while(BST){        if(x>BST->Data)            BST = BST->Right;        else if(x<BST->Data)            BST = BST->Left;        else            return BST;     }    return NULL;}

3.插入

BinTree Insert(ElementType x,BinTree BST){    if(!BST){        BST = (BinTree)malloc(sizeof(struct TreeNode));        BST->Data = x;        BST->Left = BST->Right = NULL;    }else        if(x>BST->Data)            BST->Right = Insert(x,BST->Right);        else if(x<BST->Data)            BST->Left = Insert(x,BST->Left);    return BST;}

4.删除

BInTree Delete(ElementType x,BinTree BST){    if(!BST) printf("can't find the data");    else if(x<BST->Data){        BST->Left = Delete(x,BST->Left);    }else if(x>BST->Data){        BST->Right = Delete(x,BST->Right);    }else        if(BST->Right && BST->Left){            Temp = FindMin(BST->Right);            BST->Data = Temp->Data;            BST->Right = Delete(BST->Data,BST->Right);        }else{            Temp = BST;            if(!BST->Left)                BST = BST->Right;            else if(!BST->Right)                BST = BST->Left;        }        free (Temp);    return BST;}