为了账号安全,请及时绑定邮箱和手机立即绑定

关于DeleteNode的一些疑问

void DeleteNode(){

if (this->pLChild != NULL){

this->pLChild->DeleteNode();

}

if (this->pRChild != NULL){

this->pRChild->DeleteNode();

}

if (this->pParent != NULL){

if (this->pParent->pLChild == this){

this==NULL;

}

if (this->pParent->pRChild == this){

this == NULL;

}

}

delete this;

}

//第三步的父节点判空  完全可以改成这样啊

if (this->pParent != NULL){

this == NULL;

}



正在回答

5 回答

this = NULL与this->pParent->pLChild != NULL发生冲突,相当于this->pParent->pLChild指向了空指针,发生异常

0 回复 有任何疑惑可以回复我~

好问题

0 回复 有任何疑惑可以回复我~

这样是有问题的,本来只删除左节点(该节点父节点的左节点),这样会将右节点也一起删除的!

0 回复 有任何疑惑可以回复我~

代码被吞了花括号里边是

this->pParent->pLChild = NULL;

pRChild同理

0 回复 有任何疑惑可以回复我~

首先你上面那段代码就不是老师的源码,老师那一部分的代码是

if(this->pParent != NULL)
{
    if(this->pParent->pLChild == this)}

其次this == NULL;这个语句就很令人费解,我姑且先认为是this = NULL;,现在的目的是把父节点中的pLChild或pRChild的“数据”改为NULL,那你把自己的指针变为空干吗?父节点的Child指针还是指向该节点啊,难道还会跟着变吗?

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于DeleteNode的一些疑问

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信