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;
    }
  • 相关阅读:
    jQuery轮播图(一)轮播实现并封装
    openSUSE 12.3 默认启动项
    最大堆(最小堆)
    二叉树基本操作续二:前序、中序、后序遍历(非递归 迭代方式)
    二叉树基本操作续一:二叉树建立、节点数统计
    二叉树基本操作:前序、中序、后序遍历(递归方式)
    Android如何打印std::cout/printf(重定向stdout)
    textarea高度跟随文字高度而变化
    箭头函数与普通函数的区别
    浏览器兼容问题
  • 原文地址:https://www.cnblogs.com/wuchanming/p/3806785.html
Copyright © 2011-2022 走看看