看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《cismjmgoshr (--???--)》之銘言: : ※ 引述《darkcookies (D-GRAY MAN)》之銘言: : : 開發平台(Platform): GCC : : 額外使用到的函數庫(Library Used): : : 問題(Question):請問我有一個輸入是 : : 5 1 1 4 1 0 8 1 1 11 1 1 13 0 0 4 0 1 7 0 0 2 0 0 1 0 0 : : 樹長成 : : 5 : : / \ : : 4 8 : : / / \ : : 11 13 4 : : / \ \ : : 7 2 1 : T代表現在的二元樹,Q代表現在佇列的狀態 : 佇列的第一個元素代表下一個節點要接的位置(例如5L表示要接在5這個節點的左邊) : 每次加入一個節點之後,就把它的子樹位置加到佇列的最後面 : 輸入:(每3個數字代表一個節點) : 5 1 1 4 1 0 8 1 1 11 1 1 13 0 0 4 0 1 7 0 0 2 0 0 1 0 0 : Step 1: : 5 1 1 ,根節點. 加入5L,5R至佇列 : T: : 5 : Q: 5L 5R struct node{ int value; node *left; node *right; }; void createTree(int *d,int *l ,int *r ,int num,node *&root){ node *p[num]; queue<node *> add; for(int x = 0; x < num; x++) { p[x] = new node; p[x]->value = d[x]; p[x]->left = NULL; p[x]->right = NULL; cout << "節點" << x+1 << "設值完成:" << d[x] << endl; } for(int x = 0;x < num; x++) { if(l[x]==1) { add.push(p[x]->left); } if(r[x]==1) { add.push(p[x]->right); } if(add.size()!=0) { add.front() = p[x+1]; } add.pop(); } cout << p[1]->left->value; //add.push(p[0]->value); //cout << "add[0]:" << add.front() << endl; } 請問為什麼我建好二元樹之後想看他節點的值一值當掉,是我記憶體配錯嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 134.208.48.17
blackwindy:你的left跟right都是null 02/01 06:03
thinklu:樓上正解~seg fault就是你指到沒記憶體的地方還想動它~可 02/01 08:11
thinklu:以打'where'做stack trace~這樣就可以知道在哪爆掉^^ 02/01 08:12
firejox:參考看看吧... http://ideone.com/XbQjv 02/01 11:39
firejox:仔細看main的while在寫什麼... 02/01 11:40
darkcookies:謝謝F大提供的網站以及意見和T大和B大的解說,對我幫 02/01 22:42
darkcookies:助很大:D 02/01 22:43