我正在做一个类项目,我们从二叉树中“删除”一个节点而无法访问父节点或根节点。我们这样做的方式就是用树上的下一个节点覆盖旧节点。我遇到的问题是当它是树中的最后一个节点(它之后没有向右或向左)时我不能用下一个节点覆盖它,所以我删除了它,留下了一个空指针。我尝试只使值0(或null),但它抛出一个错误,说值不能为空。如果你知道如何做到这一点,你的建议将不胜感激。
template< typename T >
inline void Node< T >::delete_node( Node< T > *&p )
{
cerr<< "delete node" << endl;
if(p->left() == 0 && p->right() == 0)
{
delete p;
}
else if (p->left() == 0)//delete p and make the parent point to the right
{
//delete p;
Node< T > *right = p->right();
p->value(right->value());
p->left(right->left());
p->right(right->right());
}
else if (p->right() == 0)//delete p ad make the parent move to the left
{
//delete p;
Node< T > *left = p->left();
p->value(left->value());
p->left(left->left());
p->right(left->right());
}
else //delete p and go to the right then all the way to the left and attach the other side there.
{
Node< T > *tmp = p->left();
Node< T > *find = p->right();
Node< T > *right = p->right();
while(find->left() != 0)
{
find = find->left();
}
find->left(tmp);
p->value(right->value());
p->right(right->right());
p->left(right->left());
}
}