[問題] C語言用Linked List 建BST
寫程式時遇到一些問題想請教各位前輩:
1) 產生新的節點(temp)時 有時候會讓程式異常終止(當掉)
而且常在第4、5個新節點就當掉 是為什麼呢 不太可能是記憶體不足吧?
2) 建樹完成後 第二個新節點(即Root的下一個)的右子點 每次走訪到它就會當掉
而把struct node結構裡的lchild, rchild順序交換 變成左子點走訪時會當掉
以下是我的程式碼
煩請各位給些建議 謝謝
---
typedef struct node *ptrn;
struct node
{
int elem;
ptrn lchild;
ptrn rchild;
};
void inorder(ptrn tree);
int main()
{
int i;
ptrn set,temp,start;
//Construct a Root
temp = (ptrn)malloc(sizeof(ptrn));
start = temp;
scanf("%d",&i);
temp -> elem = i;
temp -> lchild = NULL;
temp -> rchild = NULL;
printf("ROOT saved\n");
while(1)
{
scanf("%d",&i);
if(i==-1) break;
temp = (ptrn)malloc(sizeof(ptrn));
if(temp == NULL)
{
printf("malloc fail.\n");
temp = (ptrn)malloc(sizeof(ptrn));
}
temp->elem = i;
temp->lchild = NULL;
temp->rchild = NULL;
set = start;
while(1)
{
while(temp->elem > set->elem)
{
if(set->rchild==NULL)
{
set->rchild = temp;
printf("RC saved\n");
break;
}
set = set->rchild;
}
while(temp->elem <= set->elem)
{
if(set->lchild==NULL)
{
set->lchild = temp;
printf("LC saved\n");
break;
}
set = set->lchild;
}
break;
}
}
inorder(start);
system("pause");
}
void inorder(ptrn tree)
{
if(tree!=NULL)
{
inorder(tree->rchild);
inorder(tree->lchild);
printf("%d\n",tree->elem);
}
else printf("NULL Node\n");
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.217.108.247
→
12/30 23:47, , 1F
12/30 23:47, 1F
→
12/30 23:47, , 2F
12/30 23:47, 2F
→
12/30 23:48, , 3F
12/30 23:48, 3F
→
12/31 00:13, , 4F
12/31 00:13, 4F
推
12/31 01:06, , 5F
12/31 01:06, 5F
→
12/31 08:37, , 6F
12/31 08:37, 6F
→
12/31 08:38, , 7F
12/31 08:38, 7F
→
12/31 08:38, , 8F
12/31 08:38, 8F
→
12/31 08:40, , 9F
12/31 08:40, 9F
→
12/31 08:40, , 10F
12/31 08:40, 10F
→
12/31 09:10, , 11F
12/31 09:10, 11F
→
12/31 09:11, , 12F
12/31 09:11, 12F
→
12/31 09:11, , 13F
12/31 09:11, 13F
→
12/31 15:10, , 14F
12/31 15:10, 14F
→
12/31 15:13, , 15F
12/31 15:13, 15F
→
01/01 17:19, , 16F
01/01 17:19, 16F
Programming 近期熱門文章
PTT數位生活區 即時熱門文章