作者cat99961 (阿湯)
看板C_and_CPP
標題[問題] 請問以下交換二元樹節點的程式有甚麼錯?
時間Sun Sep 15 08:35:20 2019
請問以下交換二元樹節點的程式有甚麼錯?
我寫的交換二元樹節點的程式如下:
#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
→ Jockey66666: 15行交換t->left和t->right寫錯了 09/15 09:14
→ Jockey66666: compiler warning看一下
推 kaneson: 15行的p->left 09/15 09:16
謝謝各位 我弄出來了 感激不盡
※ 編輯: cat99961 (180.176.88.61 臺灣), 09/15/2019 09:40:52
※ 編輯: cat99961 (180.176.88.61 臺灣), 09/15/2019 09:47:57
→ wahaha279: 這版好友善喔 09/15 12:16
→ wahaha279: 善用 printf 把程式執行的過程印出來,看是不是跟你想 09/15 12:17
→ wahaha279: 的一樣 09/15 12:17