我有以下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
结构(因为我从老师处收到的任务)。
答案 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;
}
}
}