0

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

0 回答 0