老弟的数据结构

/*----------------------*/
/*--    二叉排序树    --*/
/*----------------------*/


#include
<iostream.h>

struct bTree
{
     
int data;
     bTree 
*left;
     bTree 
*right;
}
;

int sum=0;

void insert(bTree *&bt,int x)
{
     bTree 
*p;
     
if(bt!=NULL)
     
{
      
if(x>=bt->data)
        insert(bt
->right,x);
      
else
        insert(bt
->left,x);
     }

     
else
     
{
          p
=new bTree;
          p
->data=x;
          p
->left=NULL;
          p
->right=NULL;
          bt
=p;
          
return;
     }

}



bTree 
*create()
{
     cout
<<"即将建立二叉排序树\nx==0结束!"<<endl;
     bTree 
*p=NULL;
     
int x;
        cout
<<"请输入二叉树数据:"<<endl;
     cin
>>x;
     
while(x!=0)
     
{
          insert(p,x);
          cin
>>x;
     }

     
return p;
}



int leaf(bTree *bt)
{
     
if(bt==NULL)
        
return 0
     
else if(bt->left==NULL&&bt->right==NULL)
        
return 1;
     
else
        
return leaf(bt->left)+leaf(bt->right);  
}



void sumNode(bTree *bt)
{
     
if(bt)
     
{
          sum
++;
          sumNode(bt
->left);
          sumNode(bt
->right);
     }

}



int treeHight(bTree *bt)
{
     
int h,lh,rh;
     
if(bt==NULL)
         h
=0;
     
else
     
{  
          lh
=treeHight(bt->left);
          rh
=treeHight(bt->right); 
          h
=((lh>rh?lh:rh)+1); 
     }

     
return h;
}



bTree 
*search(bTree *bt,int x)
{
     
if(bt)
     
{
          
if(bt->data==x)
          
return bt;
          
else if(x>=bt->data)
           search(bt
->right,x);
          
else
           search(bt
->left,x);
     }

     
else
      
return NULL;
}



void show(bTree *bt)
{
    
if(bt)
     
{
         show(bt
->left);
         cout
<<bt->data<<' ';
         show(bt
->right);
     }

}



int Delete(bTree *bt,int x)    //算法思考ing.
{
    
return 0;
}


void clear(bTree *bt)
{
     
if(bt)
     
{
          clear(bt
->left);
          clear(bt
->right);
          delete bt;
     }

}


    
void main()
    
{
         
char s;
         
int x;
         bTree 
*root=create();
         sumNode(root);
         cout
<<"树总节点数:"<<sum<<endl;
         cout
<<"树深数:"<<treeHight(root)<<endl;;
         cout
<<"树叶子数:"<<leaf(root)<<endl;
         cout
<<"中序遍历:"<<endl;
         show(root);
         cout
<<endl;
         
         
while(1)
         
{
              cout
<<"输入'i'插入:"<<endl;
              cout
<<"输入's'查找:"<<endl;
              
//cout<<"输入'd'删除:"<<endl;
              cout<<"输入'e'结束:"<<endl;
              cin
>>s;
              
switch(s)
              
{
                  
case 'i':
                   cout
<<"请输入要插入的数:"<<endl;
                   cin
>>x;
                   insert(root,x);
                   sum
=0;
                   sumNode(root);
                   cout
<<"树总节点数:"<<sum<<endl;
                         cout
<<"树深数:"<<treeHight(root)<<endl;
                         cout
<<"树叶子数:"<<leaf(root)<<endl;
                   cout
<<"中序遍历:"<<endl;
                   show(root);
                   cout
<<endl;
                   
break;
                  
case 's'
                   cout
<<"请输入要查找的数:"<<endl;
                   cin
>>x;
                   
if(search(root,x)==NULL)
                    cout
<<"查找失败!"<<endl;
                   
else
                   
{
                    cout
<<"查找成功!\n查找的值为:"<<search(root,x)->data<<endl;
                   }

                   
break;
                  
case 'd':
                   cout
<<"请输入要删除的数:"<<endl;
                   cin
>>x;
                   
if(Delete(root,x)==0)
                    cout
<<"删除失败!"<<endl;
                   sum
=0;
                   sumNode(root);
                   cout
<<"树总节点数:"<<sum<<endl;
                         cout
<<"树深数:"<<treeHight(root)<<endl;
                         cout
<<"树叶子数:"<<leaf(root)<<endl;
                   cout
<<"中序遍历:"<<endl;
                   show(root);
                   cout
<<endl;
                   
break;
                  
case 'e':
                   clear(root);
                   cout
<<"树已清除"<<endl;
                   cout
<<endl;
                   
return;
              }

         }

    }
posted on 2008-05-27 12:40  蓝色的远空  阅读(138)  评论(0)    收藏  举报