zoukankan      html  css  js  c++  java
  • 二叉查找树(二叉排序树)(C语言)

    #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;
    }
  • 相关阅读:
    读者试读怎么评价这本书
    性能优化是数据库应用的核心问题
    ExtJS 4 Grid组件
    发挥你的SATA硬盘
    MOSS 修改了服务器账号密码后的问题
    速度真快,ExtJS第5个预览版发布
    Ext JS 4 Preview Release 4发布
    显卡性能排行榜
    手机操作系统发展史
    程序解读身份证的密码
  • 原文地址:https://www.cnblogs.com/wuchanming/p/3806785.html
Copyright © 2011-2022 走看看