c语言中的二叉搜索树插入
BST未执行插入操作。是否可能导致?-1是数组中的空元素。 链接列表不适用于此代码c语言中的二叉搜索树插入,c,C,BST未执行插入操作。是否可能导致?-1是数组中的空元素。 链接列表不适用于此代码 void insert(int *Tree,int element) { int temp=0;/* first subscript*/ if(Tree[temp]==-1){ Tree[temp]=element; return; } while(1){ if((Tree[temp]>element))
void insert(int *Tree,int element)
{
int temp=0;/* first subscript*/
if(Tree[temp]==-1){
Tree[temp]=element;
return;
}
while(1){
if((Tree[temp]>element))
if (Tree[2*temp+1]==-1){
Tree[2*temp+1]==element;
break;
}
else
temp=2*temp+1;
else if(Tree[2*temp+2]==-1){
Tree[2*temp+2]==element;
break;
}
else
temp=2*temp+2;
}
}
修复缩进,添加大括号,并替换用于赋值的
=
(应该是=
),代码工作正常。仍然希望添加一个检查以确保您没有超过树的大小
#include <stdio.h>
void insert(int *Tree,int element)
{
int temp=0;/* first subscript*/
if(Tree[temp]==-1){
Tree[temp]=element;
return;
}
while(1)
{
if((Tree[temp]>element))
{
if (Tree[2*temp+1]==-1)
{
Tree[2*temp+1]=element;
break;
}
else
{
temp=2*temp+1;
}
}
else
{
if(Tree[2*temp+2]==-1)
{
Tree[2*temp+2]=element;
break;
}
else
{
temp=2*temp+2;
}
}
}
}
int main(void) {
int tree[100];
int ii;
for(ii=0;ii<100;ii++) tree[ii]=-1;
insert(tree, 5);
insert(tree, 3);
insert(tree, 9);
insert(tree, 4);
for(ii=0; ii<10; ii++) printf("%d: %d\n", ii, tree[ii]);
}
#包括
空插入(int*树,int元素)
{
int temp=0;/*第一个下标*/
if(树[temp]=-1){
树[temp]=元素;
返回;
}
而(1)
{
if((树[temp]>元素))
{
if(树[2*temp+1]=-1)
{
树[2*temp+1]=元素;
打破
}
其他的
{
温度=2*温度+1;
}
}
其他的
{
if(树[2*temp+2]=-1)
{
树[2*temp+2]=元素;
打破
}
其他的
{
温度=2*温度+2;
}
}
}
}
内部主(空){
int树[100];
int ii;
对于(ii=0;iiTree[2*temp+1]==element
来说,赋值不会有多大作用。同样,对于Tree[2*temp+2]==元素
。哦,复制粘贴!你是一个残忍无情的丫头。你分配了足够的空间,每个元素都初始化为-1
?如果temp
超过树的大小会发生什么?…你注意到任何编译器警告吗?哇@WhozCraig-你对我们有诗意吗?仍然-眼睛很好。接近“打字错误”“?@Floris确实投了这样的票。天知道算法是否正确。甚至懒得检查=P@user3403833我建议为每个if
和else
添加大括号,即使它们只是一个语句长。现在你有一个长if-else
包装在另一个if
中,这要求双倍+1你也可以猜=(事实上,这就是你所能做的一切了=}@Floris成功的解决方案非常感谢你muchhh@YavuzGiran很高兴提供帮助。请牢记我关于始终使用{}
的评论…并始终打开编译器警告-它应该会对您的==
发出尖叫(我的gcc编译器会这样做)。