以下是我構建簡單樹的代碼。我在這裏使用的方法是,如果一個特定的節點位於arr []數組中的索引n處,那麼它將在子索引2 * n + 1處留下子項,並且在同一個子索引處將子項留在2 * n + 2處[]數組。然後我正在進行一次遍歷。但是,我在節點D處得到一個無限循環作爲我的輸出。如果有人能夠幫助我在這裏,會很樂意。簡單的樹遍歷給出了一個非終止循環。 (使用數組)
#include <stdio.h>
#include <malloc.h>
struct node
{
struct node * lc;
char data;
struct node * rc;
};
char arr[] = {'A','B','C','D','E','F','G','\0','\0','H','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'};
struct node * root = NULL;
struct node * buildTree(int rootIndex)
{
struct node * temp = NULL;
if(arr[rootIndex]!='\0')
{
temp = (struct node *)malloc(sizeof(struct node));
temp->lc = buildTree(rootIndex * 2 + 1);
temp->data = arr[rootIndex];
temp->rc = buildTree(rootIndex * 2 + 2);
}
return temp;
}
void inorder(struct node * parent)
{
while(parent != NULL)
{
inorder(parent->lc);
printf("%c\t",parent->data);
inorder(parent->rc);
}
}
int main()
{
root = buildTree(0);
inorder(root);
return 0;
}
對於這樣的問題,您應該從調試器請求幫助,而不是本網站 – YePhIcK
1)'while(parent!= NULL)' - >'if(parent!= NULL)' – BLUEPIXY
噢,好吧,這很令人尷尬。謝謝你! –