[問題] BST的swap

看板C_and_CPP (C/C++)作者 (一生一世我愛你)時間16年前 (2009/12/10 00:18), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串1/2 (看更多)
遇到的問題: (題意請描述清楚) 因為要做刪除BST節點的動作 所以希望可以把待刪除的節點 移動到external node 這樣就不用考量left child跟right child的問題(都是NULL) 題目有要求要使用qsort library,而不能用其他的方法做swap 並且有要求建立一個array of ptrs指到Tree nodes 應該是要用array來做swap吧 不過剛才測試的結果 我發現 swap ptrs array elements 並不會swap 原本的tree nodes 該如何去處理這個問題呢? (本來想要用compare() 偷吃步直接改node中的key值 但是好像失敗了 囧) 希望得到的正確結果: qsort a BST 程式跑出來的錯誤結果: array 排好了 BST 原封不動 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) codeblock in WinXP SP3 有問題的code: (請善用置底文標色功能) qsort(array,size,sizeof(array[0]),cmp); int cmp(const void *a,const void *b) { return strcmp((*(Tree**)a)->key,(*(Tree**)b)->key); } 補充說明: 如果有需要我補充其他的code 可以請提出來 感恩 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.236.215 ※ 編輯: l314520 來自: 122.117.236.215 (12/10 00:18)

12/10 00:31, , 1F
你先想想, 為什麼要 qsort, qsort 完你期望得到什麼資訊
12/10 00:31, 1F
因為題目要求一定要用qsort...

12/10 00:32, , 2F
或是你希望 tree 變什麼樣子 ? 跟原本的任務關連是什麼 ?
12/10 00:32, 2F
在交換node並且將待刪除的node刪掉後,整個排序會變動 所以我必須重新再排一次 否則這就不滿足BST的特性了 2 ˊˋ 1 3 ˋ 4 2是待刪節點 與4交換 (打錯了 囧 原本root=5不會平衡) 4 ˊˋ 1 3 再來要重排 3 ˊˋ 1 4 完成

12/10 00:35, , 3F
我蠻想看你的array of ptrs怎麼指的
12/10 00:35, 3F

12/10 00:36, , 4F
所謂的array排好了讓我有疑問
12/10 00:36, 4F
對吼 忘記說 我是用inorder traversal去跑整個BST 所以是由小到大排序 ※ 編輯: l314520 來自: 122.117.236.215 (12/10 01:02) ※ 編輯: l314520 來自: 122.117.236.215 (12/10 01:07)
文章代碼(AID): #1B7ytEX7 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1B7ytEX7 (C_and_CPP)