二叉树,删除节点问题

jianfengshxy jianfengshxy 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
erase()是删除二叉树的一个节点,find()函数是返回要删除节点的地址,函数原型是Node*& find(Node*& t,const int& d)
d是要删除的数,返回的是这个数节点的指针的引用

1 bool erase(const int& d)
2 {
3 Node*& pn=find(root,d);
4 if(!pn) return false;
5 if(pn->l!=NULL)
6 insert(pn->r,pn->l); //将要删除节点的左子树,链接到右子树上
7 Node* pr=pn->r; //从这行起,代码要干什么我不明白
8 delete pn;
9 pn=pr;
10 return true;
11 }
53
30 72
14 39 61 84
9 23 34 47 79
以删除30这个数为例find返回30这个节点的地址,pn是地址的引用,假设30节点的地址是0x01,那么pn=0x01,5~6行是将30节点的左子树加到右子树上(节点34),但是如何将39节点链接到53上,我不明白.
...全文

相关推荐

评论 17
收藏 已收藏
分享
返回顶部
jianfengshxy
C++ 语言 65,214 成员 250,514 内容