我正在做一个类项目,我们从无法访问父节点或根节点的二叉树中“删除”一个节点。我们展示的方法就是用树上的下一个节点覆盖旧节点。我遇到的问题是当它在树中的最后一个节点(在它之后的右边或左边都没有)时,我不能用下一个节点覆盖它,所以我删除它,留下一个空指针。我尝试将值设为 0(或 null),但它会引发错误,指出该值不能为 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());
}
}