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