Re: [問題] 二元樹建立問題

看板C_and_CPP作者 (D-GRAY MAN)時間12年前 (2012/02/01 02:51), 編輯推噓1(106)
留言7則, 4人參與, 最新討論串3/4 (看更多)
※ 引述《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

02/01 06:03, , 1F
你的left跟right都是null
02/01 06:03, 1F

02/01 08:11, , 2F
樓上正解~seg fault就是你指到沒記憶體的地方還想動它~可
02/01 08:11, 2F

02/01 08:12, , 3F
以打'where'做stack trace~這樣就可以知道在哪爆掉^^
02/01 08:12, 3F

02/01 11:39, , 4F
參考看看吧... http://ideone.com/XbQjv
02/01 11:39, 4F

02/01 11:40, , 5F
仔細看main的while在寫什麼...
02/01 11:40, 5F

02/01 22:42, , 6F
謝謝F大提供的網站以及意見和T大和B大的解說,對我幫
02/01 22:42, 6F

02/01 22:43, , 7F
助很大:D
02/01 22:43, 7F
文章代碼(AID): #1FA3WP2e (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1FA3WP2e (C_and_CPP)