2011-04-05 93 views
1

我上二叉搜索樹工作,他們給了我一個insertnode功能,看起來像二叉搜索樹刪除節點功能

void insertNode(Node **t, Node *n) 
    { 
     if(!(*t)) 
    *t=n; 

    else if((*t)->key<n->key)insertNode(&(*t)->right,n); 
    else if((*t)->key>n->key) insertNode(&(*t)->left,n); 
    } 

我想編寫一個函數,遞歸刪除節點到目前爲止,我還拿出:

 void remove(int huntKey,Node **t) 
    { 
bool keyFound=false; 
if(!(*t)) 
     cout<<"There are no nodes"<<endl; 

    while(keyFound==false) 
    { 
     if((*t)->key==huntKey) 
     { 
      keyFound=true; 
      (*t)->key=0; 
     } 
     else if((*t)->key < huntKey)remove(huntKey,&(*t)->right); 
     else if((*t)->key> huntKey) remove(huntKey,&(*t)->left); 
    } 
     } 

這兩種功能都可以從我的主功能的開關,它看起來像叫:

int main() 
    { 
int key=0,countCatch=0;char q; 
Node *t, *n; 
t=0; 
while((q=menu()) !=0) 
{ 
    switch(q) 
    { 
    case'?': menu(); break; 
    case'i': inOrderPrint(t); break; 
    case'a': preOrderPrint(t); break; 
    case'b': postOrderPrint(t); break; 
    case'c': {cout<<"enter key: ";cin>>key; 
    n=createNode(key);insertNode(&t,n);break;} 

    case'r':{cout<<"enter the key you want removed: "; 
    cin>>key; 
    remove(key,&t); 
    break;} 

    case'n': {countCatch=countNodes(t);cout<<countCatch<<"\n"; };break; 
    } 
} 


return 0; 
    } 

我的刪除節點功能無法正常工作....任何建議都會有所幫助....

+0

這是功課? – 2011-04-05 16:26:05

回答

1

當您刪除節點時,您只將其密鑰設置爲'0',而不是實際刪除它。

示例: '4'具有孩子'2',孩子'1'和'3'。

在代碼中,刪除「2」給你這個樹:4有孩子0,其中有兒童1和3

要刪除一個內部節點(有孩子的節點),你必須處理它的父指針和它的孩子。您必須將父節點的子指針設置爲已刪除節點的子節點之一。檢查這篇文章更多:

http://en.wikipedia.org/wiki/Binary_tree#Deletion