我用于打印树的显示函数似乎只打印第一个元素,而不是其他的。我不知道为什么我怀疑我没有递归的插入函数可能是原因,但似乎无法理解它出错的地方。任何有关如何纠正或代码失败的解释都会有所帮助。谢谢。这棵树显示函数为什么只打印第一个元素?
#include <stdio.h>
#include<stdlib.h>
void insert(int data_add,struct tree *temp);
void display(struct tree *temp);
struct tree
{
int data;
struct tree *left;
struct tree *right;
} *root = NULL;
int main()
{
int data_add,n;
while(1)
{
printf("\n\n1.Add\n2.Display\n4.Exit\n");
scanf("%d",&n);
switch(n)
{
case 1: printf("\nEnter the element to add ");
scanf("%d",&data_add);
insert(data_add,root);
break;
case 2: printf("The nos are: ");
display(root);
break;
/*case 3: printf("The nos are: ");
reversedisplay(root);*/
case 4: exit(1);
break;
default: printf("\nChoose a appropriate option");
}
}
}
void insert(int data,struct tree *temp)
{
struct tree *current;
current = (struct tree*) malloc(sizeof(struct tree));
current->data = data;
if(root == NULL)
{
root = current;
current->left = NULL;
current->right = NULL;
}
else
{
while(temp!=NULL)
{
if(data<temp->data)
{
temp = temp->left;
}
else
{
temp = temp->right;
}
}
temp = current;
current->left = NULL;
current->right = NULL;
}
}
void display(struct tree *temp)
{
if(temp == NULL)
return;
display(temp->right);
display(temp->left);
printf("%d",temp->data);
}
问题是,插入一个元素时,您不是将新插入的元素分配为任何其他节点的左侧或右侧子元素。每次尝试插入元素时,您只是在插入时遍历树,因为新元素未添加到树中。 –
但我已经为当前分配空间,然后在遍历后,我将温度分配给当前的权利?那么这不会在树中添加新的元素?那么如何实现呢? –
检查我的答案。 –