1

我有以下 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一个(因为我从老师那里收到的任务)。

4

1 回答 1

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;
      }
   }
}
于 2012-10-28T10:24:06.583 回答