码迷,mamicode.com
首页 > 编程语言 > 详细

二叉查找树(二叉排序树)(C语言)

时间:2014-06-25 12:53:17      阅读:334      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   color   os   

#include<stdio.h>
#include "fatal.h"
struct TreeNode;
typedef struct TreeNode *Position;
typedef struct TreeNode *SearchTree;
typedef int ElementType;
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);
struct TreeNode 
{
    ElementType Element;
    SearchTree left;
    SearchTree right;
};

SearchTree MakeEmpty(SearchTree T)
{
    if(T!=NULL)
    {
        MakeEmpty(T->left);
        MakeEmpty(T->right);
        free(T);
    }
    return NULL;
}

Position Find(ElementType X,SearchTree T)
{
    if(T==NULL)
        return NULL;
    if(X<T->Element)
        return Find(X,T->left);
    else if(X>T->Element)
        return Find(X,T->right);
    else 
        return T;
}

Position FindMin(SearchTree T)
{
    if(T==NULL)
        return NULL;
    if(T->left==NULL)
        return T;
    else
        return FindMin(T->left);
}

Position FindMax(SearchTree T)
{
    if(T==NULL)
        return NULL;
    else if(T->right==NULL)
        return T;
    else
        return FindMax(T->right);
}

SearchTree Insert(ElementType X,SearchTree T)
{
    if(T==NULL)
    {
        T=malloc(sizeof(struct TreeNode));
        if(T==NULL)
            FatalError("Out of space!!!");
        else
        {
            T->Element=X;
            T->left=T->right=NULL;
        }
    }
    else if(X<T->Element)
        T->left=Insert(X,T->left);
    else if(X>T->Element)
        T->right=Insert(X,T->right);
    return T;
}

SearchTree Delete(ElementType X,SearchTree T)
{
    Position TmpCell;
    if(T==NULL)
        Error("Error not found");
    else if(X<T->Element)
        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);
    }
    return T;
}
ElementType Retrieve(Position P)
{
    if(P==NULL)
        return -1;
    else
        return P->Element;
}

 

二叉查找树(二叉排序树)(C语言),布布扣,bubuko.com

二叉查找树(二叉排序树)(C语言)

标签:style   class   blog   code   color   os   

原文地址:http://www.cnblogs.com/wuchanming/p/3806785.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!