私はツリーを印刷するために使用した表示機能は、最初の要素を印刷するように見えます。再帰なしで使用した挿入関数が原因である可能性があると思われる理由はわかりませんが、どこが間違っているのか分からないようです。どのように修正するか、コードがどこで失敗するかについての説明は役に立ちます。ありがとう。このツリー表示機能が最初の要素だけを印刷するのはなぜですか?
#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);
}
問題は、要素を挿入するときに、他のノードの左または右の子として新しく挿入された要素を割り当てていないことです。新しい要素がツリーに追加されないため、要素を挿入しようとするたびに、挿入中にツリーをたどるだけです。 –
しかし、私は現在のスペースを割り振りました。そして、トラバースした後、現在の温度にtempを割り当てていますか?それで、ツリーに新しい要素が追加されることはありませんか?だからそれを達成する方法は? –
私の答えをチェックしてください。 –