首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二进制搜索树删除节点函数

问二进制搜索树删除节点函数
EN

Stack Overflow用户
提问于 2011-04-06 00:23:27
回答 2查看 2.5K关注 0票数 1

我正在处理一个二进制搜索树,我得到了一个插入节点函数,它看起来像这样

代码语言:javascript
复制
  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);
  }

我正在尝试编写一个递归删除节点的函数,到目前为止我已经想出了:

代码语言:javascript
复制
     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);
    }
       }

这两个函数都是从我的main函数中的一个开关调用的,如下所示:

代码语言:javascript
复制
    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;
     }

我的删除节点功能不起作用,properly....any建议会有帮助...

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-06 00:36:34

当您移除节点时,您只是将其键设置为'0',而不是实际移除它。

例如:“4”具有子项“2”,而子项“1”和“3”

在您的代码中,删除'2‘会得到这样的树:4有子元素0,子元素有1和3。

要移除内部节点(具有子节点的节点),必须处理其父指针及其子节点。您必须将父节点的子指针设置为已删除节点的子节点之一。有关更多信息,请查看本文:

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

票数 1
EN

Stack Overflow用户

发布于 2011-04-12 21:36:40

看看代码,它不是递归的,虽然是http://code.google.com/p/cstl/source/browse/src/c_rb.c

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5555120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档