使用检索方法查找删除,BST C ++

时间:2009-11-19 23:30:38

标签: c++

为了更容易删除叶子,我想知道如何使用我的retreive方法(找到一个节点)在删除之前首先检索它。所以这样我就不必重新编码处于retreive中的相同循环方案:

bool BST::retrieve(const char *key, data& aData) const
{
    for ( int i = 0; i < maxSize / 2; i++ )
    {//iterate
        if (! items[2*i+1].empty &&//proceed
              items[2*i+1].theData.getName() < key )
        {// then search leftward
            if ( items[2*i+1].theData == key )
            {
                aData.setName(key);
                return true;
            }
        }
        else if (! items[2*i+2].empty && 
                   items[2*i+2].theData.getName() > key )
        {   // then search rightward
            if ( items[2*i+2].theData == key )
            {
                aData.setName(key);
                return true;
            }
        }
    }// reiterate on condition.
    return false;
}

bool BST::remove(const char* key)
{   
    this->retrieve(key, items[Position].theData );
         // get the position of the node we want to delete.
         if ( items[2*Position+1].empty &&
              items[2*Position+2].empty )
         {
             // then it is a leaf.
         }
}

BST::BST(int capacity) : items(new item[capacity]), Position(0), 
leftChild(0), rightChild(0), maxSize(capacity), size(0), isLeaf(0)
{

}

位置变量出现为0.如果我在retreive方法的开头声明一个普通的旧int isLeaf,然后当我们找到它时,分配它,isLeaf = 2*i+1;或{{1 }}

然后我需要传递那个POD,isleaf = 2*i+2作为参数。因此,我需要一个帮助函数的删除方法?

似乎将我的remove方法编码为retreive节点是无关紧要的。

基本上是在索引之后。

1 个答案:

答案 0 :(得分:0)

我建议您更改检索功能,以使用找到您要查找的数据索引的函数,然后填充aData字段。然后,您可以在检索和删除功能中使用新函数来查找索引。