早教吧作业答案频道 -->其他-->
二叉排序树问题,课程设计采用顺序存储方式或二叉链表存储方式保存二叉排序树(1)给出n个数,并由这n个数创建一棵二叉排序树。(2)在二叉排序树中查找值为e的节点。(3)给出一个
题目详情
二叉排序树问题,课程设计采用顺序存储方式或二叉链表存储方式保存二叉排序树
(1)给出n个数,并由这n个数创建一棵二叉排序树。
(2)在二叉排序树中查找值为e的节点。
(3)给出一个新的数x,将其加入到二叉排序树。
要求:由一个主函数提供统一的处理接口,并分析各算法的时间复杂度
(1)给出n个数,并由这n个数创建一棵二叉排序树。
(2)在二叉排序树中查找值为e的节点。
(3)给出一个新的数x,将其加入到二叉排序树。
要求:由一个主函数提供统一的处理接口,并分析各算法的时间复杂度
▼优质解答
答案和解析
#include
#include
typedef struct node
{
int data;
node *left;
node *right;
}node;
node* CreateTree(node *root,int n)
{
if(root==NULL)
{
root=(node *)malloc(sizeof(node));
root->data=n;
root->left=NULL;
root->right=NULL;
return root;
}
else if(n>root->data)
{
root->right=CreateTree(root->right,n);
return root;
}
else if(ndata)
{
root->left=CreateTree(root->left,n);
return root;
}
}
void Print(node *root)
{
if(root!=NULL)
{
Print(root->left);
printf("%d ",root->data);
Print(root->right);
}
return;
}
bool search(node* root,int a)
{
node *p=root;
while(p!=NULL)
{
if(a==p->data)
return true;
else if(a>p->data)
p=p->right;
else if(adata)
p=p->left;
}
return false;
}
void del(char *c)
{
int i,j=0,k=0;
bool b=true;
for(i=0;c[i]!='\0';++i)
{
b=true;
k=0;
while(k {
if(c[k]==c[i])
{
b=false;
break;
}
k++;
}
if(!b)
continue;
c[j]=c[i];
j++;
}
c[j]='\0';
}
int main()
{
char c[51];
int n,i,a,m;
bool b=false,b1=false;
node* root=NULL;
while(1)
{
printf("1.请输入长度不超过50的整数\n2.删除重复元素\n3.构建二叉排序树\n4.查找\n5.退出\n");
scanf("%d",&n);
getchar();
switch(n)
{
case 1:
{
scanf("%s",c);
printf("输入的整数为%s\n",c);
b=true;
break;
}
case 2:
{
if(!b)
printf("没有数据\n");
del(c);
printf("删除后的整数为%s\n",c);
break;
}
case 3:
{
if(!b)
printf("没有数据\n");
i=0;
while(c[i]!='\0')
{
a=c[i]-'0';
root=CreateTree(root,a);
i++;
}
printf("中序序列为:\n");
Print(root);
printf("\n");
break;
}
case 4:
{
if(!b)
printf("没有数据\n");
scanf("%d",&m);
if(search(root,m))
printf("成功\n");
else
printf("失败\n");
break;
}
case 5:
{
b1=true;
}
}
if(b1)
break;
}
return 0;
}
#include
typedef struct node
{
int data;
node *left;
node *right;
}node;
node* CreateTree(node *root,int n)
{
if(root==NULL)
{
root=(node *)malloc(sizeof(node));
root->data=n;
root->left=NULL;
root->right=NULL;
return root;
}
else if(n>root->data)
{
root->right=CreateTree(root->right,n);
return root;
}
else if(n
{
root->left=CreateTree(root->left,n);
return root;
}
}
void Print(node *root)
{
if(root!=NULL)
{
Print(root->left);
printf("%d ",root->data);
Print(root->right);
}
return;
}
bool search(node* root,int a)
{
node *p=root;
while(p!=NULL)
{
if(a==p->data)
return true;
else if(a>p->data)
p=p->right;
else if(a
p=p->left;
}
return false;
}
void del(char *c)
{
int i,j=0,k=0;
bool b=true;
for(i=0;c[i]!='\0';++i)
{
b=true;
k=0;
while(k
if(c[k]==c[i])
{
b=false;
break;
}
k++;
}
if(!b)
continue;
c[j]=c[i];
j++;
}
c[j]='\0';
}
int main()
{
char c[51];
int n,i,a,m;
bool b=false,b1=false;
node* root=NULL;
while(1)
{
printf("1.请输入长度不超过50的整数\n2.删除重复元素\n3.构建二叉排序树\n4.查找\n5.退出\n");
scanf("%d",&n);
getchar();
switch(n)
{
case 1:
{
scanf("%s",c);
printf("输入的整数为%s\n",c);
b=true;
break;
}
case 2:
{
if(!b)
printf("没有数据\n");
del(c);
printf("删除后的整数为%s\n",c);
break;
}
case 3:
{
if(!b)
printf("没有数据\n");
i=0;
while(c[i]!='\0')
{
a=c[i]-'0';
root=CreateTree(root,a);
i++;
}
printf("中序序列为:\n");
Print(root);
printf("\n");
break;
}
case 4:
{
if(!b)
printf("没有数据\n");
scanf("%d",&m);
if(search(root,m))
printf("成功\n");
else
printf("失败\n");
break;
}
case 5:
{
b1=true;
}
}
if(b1)
break;
}
return 0;
}
看了 二叉排序树问题,课程设计采用...的网友还看了以下:
平面或直线上,两个点能量叉积?如果能,叉出来的是什麼?还是要两个向量才能叉积? 2020-04-26 …
如图,把振动的音叉移近一个用细绳吊着的很轻的塑料球,音叉并没有碰到球,球发生了运动,发生这种现象的 2020-06-03 …
问个简单的高一函数概念章的题已知f(x)=x^2+2x-3,求(1)f(-2),f[f(-2)]( 2020-06-03 …
什么是以内燃机作为动力装置的叉车这是选择题,有四个选项,A、电瓶叉车B、内燃叉车C、拣选式叉车D、 2020-06-30 …
声音是一种常见的现象,下列说法正确的是()A.敲击音叉,音叉发出的声音是由音叉的振动产生的B.蜜蜂 2020-07-16 …
数据结构由二叉树的中序序列及前序序列能唯一的建立二叉树,试问中序序列及后序序列是否也能唯一的建立二叉 2020-12-05 …
为什么由二叉树的中序和前序遍历序列可以唯一确定一棵二叉树,而由前序和后序遍历则不能?同样为什么二叉树 2020-12-05 …
写出由二叉树的中序遍历序列mid[1..n]和层次遍历序列lev[1..n]确定二叉树的算法 2020-12-05 …
由音叉振动发出的声音,正确的是[]①它的波是纵波②它的频率是由音叉的固有频率决定的③当它由空气进入水 2020-12-09 …
如图2-3,在教室里敲一下音叉,同学们能听到由音叉而发出的声音。在人和音叉之间传播声音的介质是。声音 2020-12-28 …