关于二叉树叶子结点删除的问题

时间:2021-04-22 10:11:31
我想的是基于广度优先遍历的算法进行删除
template <class T>
void BinaryTree<T>::deleteye(BinaryTreeNode<T>*&r)
{
   queue<BinaryTreeNode<T>*>nodeQueue;
    BinaryTreeNode<T>*pointer=r;
    if(pointer)
    {
        nodeQueue.push(pointer);
        if(pointer->leftchild==NULL&&pointer->rightchild==NULL)
        {
            pointer==NULL;

        }
    }
    while(!nodeQueue.empty())
    {
        pointer=nodeQueue.front();

        nodeQueue.pop();
        if(pointer->leftchild)
        {
            nodeQueue.push(pointer->leftchild);

        }
        if(pointer->rightchild)
        {
            nodeQueue.push(pointer->rightchild);

        }
        cout<<pointer->element<<endl;
        if(pointer->leftchild==NULL&&pointer->rightchild==NULL)
        {
            pointer=NULL;
            cout<<"yishan"<<endl;
        }

    }
    pointer=r;
    //levelorder(pointer);
}
但是最后再次遍历时还是能输出所有结点,怎么回事?

4 个解决方案

#1


关于二叉树叶子结点删除的问题
 if(pointer->leftchild==NULL&&pointer->rightchild==NULL)
        {
             pointer==NULL;

        }
应该是pointer=NULL吧

#2


改了之后删除的结点还是会输出,但是是奇奇怪怪的数字

#3


应该是你没有修改它的父节点的字段

#4


所有的结点都按这个函数执行啊,没大懂为什么说要修改父节点的字段
而且最近又写了一个二叉搜索树的删除函数,也是这种问题

#1


关于二叉树叶子结点删除的问题
 if(pointer->leftchild==NULL&&pointer->rightchild==NULL)
        {
             pointer==NULL;

        }
应该是pointer=NULL吧

#2


改了之后删除的结点还是会输出,但是是奇奇怪怪的数字

#3


应该是你没有修改它的父节点的字段

#4


所有的结点都按这个函数执行啊,没大懂为什么说要修改父节点的字段
而且最近又写了一个二叉搜索树的删除函数,也是这种问题