现在的位置: 首页 > 综合 > 正文

一些简单二叉查找树的操作

2012年08月03日 ⁄ 综合 ⁄ 共 3655字 ⁄ 字号 评论关闭

#include "iostream"
#include "stdlib.h"
#define N 10
using namespace std;

typedef struct BitNode{
       
              char                     data;
              struct BitNode          *Left;
              struct BitNode          *Right;
             
}BitNode,*BiTree;

void CreatBiTree(BiTree *T,char s)
{
              if(*T==NULL)
              {
                       
                        *T=(BitNode*)malloc(sizeof(BitNode));
                       (*T)->data=s;
                       (*T)->Left=NULL;
                       (*T)->Right=NULL;
              }
              else
              {
                        if((*T)->data>s)
                              CreatBiTree(&((*T)->Left),s);
                        else if((*T)->data<s)
                              CreatBiTree(&((*T)->Right),s);
                        else  
                              return ;    
              }    
}                             
//void Find(BiTree T,int s)
//{
//             
//              if(s>T->data)
//                     return      Find(T->Right,s);
//              else if(s<T->data)
//                     return      Find(T->Left,s);                                      
//               else
//                      return     T;
//}

int FindMin(BiTree T)
{
         if(T!=NULL)
         {
                    if(T->Left!=NULL)
                        FindMin(T->Left);
                    else
                     return T->data;
         }           
}                      

void FindMax(BiTree T)
{
            if(T!=NULL)
                while(T->Right!=NULL)
                    T=T->Right;
             printf("%c/n",T->data);
}   

void Delete(BiTree *T,char s)
{
             
                if(T!=NULL)
                {
                             if(s<(*T)->data)
                                  Delete(&(*T)->Left,s);
                             else if(s>(*T)->data)
                                  Delete(&(*T)->Right,s);
                             else
                             {
                                             if((*T)->Left&&(*T)->Right)
                                             {
                                                        (*T)->data=FindMin((*T)->Right);
                                                        //T->data=TmpCell->data;
                                                        Delete(&(*T)->Right,(*T)->data);
                                             }
                                             else
                                             {
                                                       BitNode *TepCell=*T;
                                                       if((*T)->Right==NULL)
                                                                *T=(*T)->Left;
                                                        else if((*T)->Left==NULL)
                                                                *(T)=(*T)->Right;
                                                        free(TepCell);
                                             }
                             }
                }
}                                                                                           
                
void PreOder(BiTree T)
{
         if(T)
         {    
                       printf("%c/n",T->data);
                       PreOder(T->Left);  
                       PreOder(T->Right);
         }             
}        

int main()
{
         BiTree T=NULL;
         char a[N]={'5','2', '3','6', '8', '7', '4', '1', '0', '9'};
         for(int i=0;i<N;i++)
                 CreatBiTree(&T,a[i]);
          Delete(&T,a[1]);      
         PreOder(T);
         //printf("/n");
       //  FindMin(T);
       //  printf("/n");
       //  FindMax(T);
         while(1);
}                

                                                 
                       
     

    

抱歉!评论已关闭.