作者honamida (honamida)
看板C_and_CPP
標題[問題] binary search
時間Tue Nov 15 02:14:33 2011
我想透過binary search 找出正確的節點
然後把data 插入 binary search tree 裡
這是我拙劣的程式碼@@~
treepointer* travel(treepointer *root, int k)
{
if( k < root->key){
if(root->left == NULL) // 左節點空了 又想插入的k 小於 parent
return root;
else
return travel(root->left,k);
}
if( k > root->key){
if(root->right == NULL)// 右節點空了 想插入的k 大於parent
return root;
else
return travel(root->right,k);
}
}
我的想法是從原有的 BST 的ROOT開始
要是要讀的序列數比ROOT小 就往左邊結點移到下一個SUBTREE
然後繼續做一樣的事
直到如果讀的序列數小於parent 又左邊已經是null 沒有下個結點了
所以這個數應該要插在這個NULL的地方
所以再插入前都用travel跑一次應該要插入在哪個節點
再用linklist 指過去
不過會遇到問題是
要讀的序列像 5 7 9 3 1 8
應該要是
5
3 7
1 9
8
就變成 8 會在 9 的右邊 @@
如果自己在改一下序列的數字總會有類似的問題
想請問一下是不是我的TRAVEL的想法有錯
還是我程式達不到我想要做的?
謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.118.30
推 Yshuan:1.縮排小錯 2.你得到是末端leaf 想必要再做comp(r->k, k) 11/15 03:18
→ Yshuan:就想法上 有重複的片段了 只單看這個function是感覺沒問題 11/15 03:18
→ Yshuan:3. 若root==NULL 會有segmentation fault 4. key重複問題 11/15 03:20