二叉树,删除节点问题
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上,我不明白.