二叉查找树的部分例程

原创 2013年12月05日 14:38:40

searchtree.h

#ifndef SEARCHTREE_H_INCLUDED
#define SEARCHTREE_H_INCLUDED

typedef  int ElementType;
struct treenode;
typedef  struct treenode *Position;
typedef  Position  SearchTree;
struct  treenode
{
    ElementType  data;
    SearchTree  left;
    SearchTree  right;
};

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);


#endif // SEARCHTREE_H_INCLUDED

searchtree.c

#include  <stdio.h>
#include  <malloc.h>
#include   "searchtree.h"

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;
    else if(X <T->data)
        return  Find(X, T->left);
    else if(X >T->data)
        return  Find(X,T->right);
    else
        return  T;
}


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


Position  FindMax(SearchTree  T)
{
    if(T!=NULL)
        while(T->right!=NULL)
              T=T->right;

    return T;
}


SearchTree  Insert(ElementType  X,SearchTree  T)
{
    if(T==NULL)
    {
        T=(SearchTree)malloc(sizeof(struct treenode));
        if(T==NULL)
            printf("Error: out of space!!!");
        else
        {
            T->data=X;
            T->left =T->right =NULL;
        }
    }
    else  if(X <T->data)
    {
        T->left =Insert(X, T->left);
    }
    else  if(X >T->data)
    {
        T->right  =Insert(X , T->right);
    }

    return T;   /**< don't forget  this line!!!! */
}



SearchTree  Delete(ElementType  X,SearchTree  T)
{
    Position  temp;

    if(T==NULL)
        printf("Error: not this element!!!");
    else if(X <T->data)
        T->left =Delete(X, T->left);   /**<  Go left */
    else if(X >T->data)
        T->right =Delete(X, T->right);  /**< go  right */
    else     /**< find  element,delete it */
    {
        if(T->left && T->right)
        {
            temp =FindMin(T->right) ;  /**< the minest value  in right subtree */
            T->data =temp->data;
            T->right =Delete(T->data, T->right);   /**< 删去右子树中的最小节点,可以编写deletemin函数以提高效率 */
        }
        else
        {
            temp =T;
            if(T->left ==NULL)
                T=T->right;
            else
                T=T->left;
            free(temp);
        }
    }

    return  T;
}


二叉查找树的各项操作(重点是结点的删除部分和递归的运用)

大半年前学二叉树时,看不懂删除结点的代码,对递归的理解很浅,今天把问题一并解决,加深对递归的理解。          1.删除结点的算法描述:如果待删除的结点至多只有一个子结点,那么需要删除的就是这...

找出二叉树中最大的二叉查找树部分

Given a binary tree, find the largest Binary Search Tree (BST), where largest means BST with largest...

二叉查找树C++实现

  • 2013年11月07日 16:54
  • 4KB
  • 下载

课程设计——二叉查找树

  • 2014年03月13日 16:08
  • 116KB
  • 下载

自己实现Java中二叉查找树的部分功能(待补充)

用于实现二叉查找树的节点对象package custom.tree;/** * 用于实现二叉树结构的节点 */ public class TreeNode { //左叶子节点 pri...

二叉查找树

  • 2014年09月15日 23:27
  • 3KB
  • 下载

Objective C二叉查找树

  • 2013年12月25日 14:55
  • 27KB
  • 下载

BST(Binary Search Tree,二叉查找树,二叉排序树)c的实现(部分函数不知如何调用)

#include #include #include using namespace std; typedef struct node { int key; struct node...

C++二叉查找树的实现

  • 2010年07月20日 21:16
  • 1KB
  • 下载

二叉查找树C#描述版

  • 2013年11月01日 17:42
  • 31KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉查找树的部分例程
举报原因:
原因补充:

(最多只允许输入30个字)