二叉排序树的操作(C语言)

来源:互联网 发布:电影淘淘源码 编辑:程序博客网 时间:2024/06/05 05:38


#include"stdio.h"

#include"stdlib.h"
#include"string.h"
#define NUM  5
typedef struct BTNode
{
        int key;
        struct BTNode *lchild,*rchild;
}BTNode;
void BTInsert(BTNode *&T,int key);//插入节点 
void CreateBTNode(BTNode *&T);//构造二叉排序树
void PrintfBTNode(BTNode *T);//中序遍历二叉排序树
BTNode  *BTSearch(BTNode *T,int key);//查找
int  CountBTNode(BTNode *T,int key);//查找小于key的元素个数
int main()
{
    BTNode *T;
    int sum=0;
    T=NULL;
    printf("\n----------构造二叉排序树-------\n");
    CreateBTNode(T);
    printf("\n----------打印二叉排序树-------\n");
    PrintfBTNode(T);
    printf("\n----------查找-------\n");
    printf("%d",BTSearch(T,4)->key);
    printf("\n----------查找小于3的元素个数-------\n");
    printf("%d\t",CountBTNode(T,3));
    system("pause");
    return 0;
}
//插入节点 
void BTInsert(BTNode *&T,int key)
{
     if(T==NULL)
     {
        T=(BTNode *)malloc(sizeof(BTNode));
        T->key=key;
        T->lchild=T->rchild=NULL;
     } 
     else
      {
          if(T->key > key)
            BTInsert(T->lchild,key);
          else if(T->key <key)
            BTInsert(T->rchild,key);
      }
}
//构造二叉排序树
void CreateBTNode(BTNode *&T)
{
     int i,x;
     for(i=0;i<NUM;i++)
     {
           printf("请输入数据:\n");
           scanf("%d",&x);
           BTInsert(T,x);
     }
}
//中序遍历二叉排序树
void   PrintfBTNode(BTNode *T)
{
    if(T)
    {
     PrintfBTNode(T->lchild);
     printf("%d\t",T->key);
     PrintfBTNode(T->rchild);
     }
}
//查找
BTNode  *BTSearch(BTNode *T,int key)
{
       if(T==NULL)
           return 0;
       else
       {
           if(T->key==key)
             return  T;
           else if(T->key > key)
           return  BTSearch(T->lchild,key);
           else
           return BTSearch(T->rchild,key);
       }
}
//查找小于key的元素个数
int  CountBTNode(BTNode *T,int key)
{
     
      if(T)
      {
           if(T->key > key)
              return  CountBTNode(T->lchild,key);
           else if(T->key < key )
              return CountBTNode(T->lchild,key)+1+CountBTNode(T->rchild,key);
           else
              return CountBTNode(T->lchild,key)+CountBTNode(T->rchild,key);
     }
     else
     return 0;
}










     
1 0
原创粉丝点击