qq_David先森i_0
2018-06-14 08:37
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;
}
this = NULL与this->pParent->pLChild != NULL发生冲突,相当于this->pParent->pLChild指向了空指针,发生异常
好问题
这样是有问题的,本来只删除左节点(该节点父节点的左节点),这样会将右节点也一起删除的!
代码被吞了花括号里边是
this->pParent->pLChild = NULL;
pRChild同理
首先你上面那段代码就不是老师的源码,老师那一部分的代码是
if(this->pParent != NULL) { if(this->pParent->pLChild == this)}
其次this == NULL;这个语句就很令人费解,我姑且先认为是this = NULL;,现在的目的是把父节点中的pLChild或pRChild的“数据”改为NULL,那你把自己的指针变为空干吗?父节点的Child指针还是指向该节点啊,难道还会跟着变吗?
数据结构探险之树篇
56461 学习 · 116 问题
相似问题