二进制搜索树 - 删除节点,没有指向前任的指针

时间:2012-10-28 10:17:37

标签: c++ binary-search-tree

我有以下BST的实施:

struct BstNode
{
    int value;
    BstNode* leftSubnode;
    BstNode* rightSubnode;

    BstNode(int value)
    {
        this->value = value;
        this->leftSubnode = this->rightSubnode = nullptr;
    }
};

struct BstTree
{
    BstNode* root;
};

你可以看到,我没有指向前任(当前节点的父节点)的指针。我没有实现添加/显示方法的问题,但我无法弄清楚如何从我的结构中删除节点。当你只有指向左右节点的指针时,有没有可能做到这一点?请注意,所有方法都应该针对BstTree结构实施,而不是针对BstNode结构(因为我从老师处收到的任务)。

1 个答案:

答案 0 :(得分:2)

像这样的东西,适应你的特殊要求并填补空白

void remove(BstTree& tree, int value)
{
   BstNode* parent = nullptr;
   BstNode* node = tree.root;
   while (node)
   {
      if (node->value == value)
      {
         if (parent)
         {
            // remove node using the parent pointer
         }
         else
         {
            // remove the root node
         }
         return;
      }
      if (value < node->value)
      {
         // go down left branch
         parent = node;
         node = node->leftSubNode;
      }
      else
      {
         // go down right branch
         parent = node;
         node = node->rightSubNode;
      }
   }
}