[問題] 請問以下交換二元樹節點的程式有甚麼錯?

看板C_and_CPP作者 (阿湯)時間4年前 (2019/09/15 08:35), 4年前編輯推噓1(104)
留言5則, 3人參與, 4年前最新討論串1/1
請問以下交換二元樹節點的程式有甚麼錯? 我寫的交換二元樹節點的程式如下: #include <iostream> using namespace std; struct node { int data; struct node *left; struct node *right; }; void swaptree(struct node *t) { static int i=1; struct node *p; if ( t!=NULL) { p->left; t->left=t->right; t->right=p; printf("第%d個節點的值為%d",i,t->data); i++; swaptree(t->left); swaptree(t->right);} } int main(void) { struct node *h1,*h2,item1,item2,item3,item4,item5; h1=&item1; h2=&item1; item1.data=1;item1.left=&item2;item1.right=&item3; item2.data=2;item2.left=&item4;item2.right=&item5; item3.data=3;item3.left=NULL;item3.right=NULL; item4.data=4;item4.left=NULL;item4.right=NULL; item5.data=5;item5.left=NULL;item5.right=NULL; swaptree(h1); return 0; } ------------------------------------------------------------ 我在http://ideone.com/LrZpN1 貼以上程式碼 結果是 第1個節點的值為1第2個節點的值為3 而不是我想的"第1個節點的值為1第2個節點的值為3第3個節點的值為2第4個節點的值為5 第5個節點的值為4" 看起來這個程式只有進入第一個遞迴swaptree(t->left); 而沒有進入第二個遞迴swaptree(t->right); 請問各位高手可以幫忙除錯呢? 拜託各位大大了...我真的弄了好久好久 拜託了 謝謝謝謝謝謝謝謝謝謝謝謝... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.176.88.61 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1568507723.A.5D6.html

09/15 09:14, 4年前 , 1F
15行交換t->left和t->right寫錯了
09/15 09:14, 1F
Jockey66666: compiler warning看一下

09/15 09:16, 4年前 , 2F
15行的p->left
09/15 09:16, 2F
謝謝各位 我弄出來了 感激不盡 ※ 編輯: cat99961 (180.176.88.61 臺灣), 09/15/2019 09:40:52 ※ 編輯: cat99961 (180.176.88.61 臺灣), 09/15/2019 09:47:57

09/15 12:16, 4年前 , 3F
這版好友善喔
09/15 12:16, 3F

09/15 12:17, 4年前 , 4F
善用 printf 把程式執行的過程印出來,看是不是跟你想
09/15 12:17, 4F

09/15 12:17, 4年前 , 5F
的一樣
09/15 12:17, 5F
文章代碼(AID): #1TVOTBNM (C_and_CPP)