看板 Programming 關於我們 聯絡資訊
寫程式時遇到一些問題想請教各位前輩: 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
firejox:就你的問題 可能是沒有連好吧... 123.240.128.52 12/30 23:47
firejox:拿一張紙和筆模擬一下過程 看有沒有遺漏的 123.240.128.52 12/30 23:47
firejox:地方... 123.240.128.52 12/30 23:48
skiusan:第二點有這個可能 但是第一點呢203.217.108.247 12/31 00:13
chchwy:當掉就是走錯 連錯了 220.134.128.54 12/31 01:06
felixtung:1. malloc()失敗不該無止盡做下去。 111.251.207.65 12/31 08:37
felixtung:2.Insert node的while迴圈錯了,再仔細 111.251.207.65 12/31 08:38
felixtung:想一下吧!^^ 111.251.207.65 12/31 08:38
felixtung:PS:你的insert node也可以用recursive 111.251.207.65 12/31 08:40
felixtung:call來實現,會比較簡潔!^^ 111.251.207.65 12/31 08:40
felixtung:抱歉看錯!malloc()失敗沒有無止盡做下 111.251.207.65 12/31 09:10
felixtung:去。 111.251.207.65 12/31 09:11
felixtung:只是再做一次也不保證就會成功了!^^ 111.251.207.65 12/31 09:11
firejox:insert只要一層while就好... 123.240.128.52 12/31 15:10
firejox:假如malloc失敗還要剝削電腦= = 123.240.128.52 12/31 15:13
skiusan:謝謝兩位 繼續嘗試中203.217.108.247 01/01 17:19