关于DeleteNode的一些疑问

来源:6-4 二叉树编码实战(四)

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;

}



写回答 关注

5回答

  • 慕粉7686423
    2020-10-31 15:35:43

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

  • 慕粉7686423
    2020-10-31 15:26:22

    好问题

  • 慕粉1129289399
    2018-07-21 12:59:18

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

  • 三生若空白
    2018-06-17 11:36:42

    代码被吞了花括号里边是

    this->pParent->pLChild = NULL;

    pRChild同理

  • 三生若空白
    2018-06-17 11:35:14

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

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

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

数据结构探险之树篇

树,将为你开启更精彩的数据结构大门,了解更多概念

56461 学习 · 116 问题

查看课程

相似问题