数据结构
/*----------------------*/
/**//*-- 二叉排序树 --*/
/**//*----------------------*/


#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;
}
}
}

/**//*----------------------*/

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

/**//*----------------------*/


#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)
评论()
收藏
举报