二叉树,删除节点问题
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上,我不明白.
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上,我不明白.
...全文
相关推荐
C语言实现二叉树的创建、插入、删除、遍历等操作
C语言实现二叉树的创建、插入、删除、遍历(先序、中序、后续、深度优先、广度优先)、计算度为0,1,2的节点个数。 包括排序二叉树的实现
线索二叉树的插入,删除
一、内容 线索二叉树的应用。实现线索二叉树的建立、插入、删除、恢复线索的实现。
递归删除二叉树中以x为根的子树
今天小编就为大家分享一篇关于递归删除二叉树中以x为根的子树,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
二叉树的操作(建立、添加、删除、修改)
关于二叉树的基本操作,建立添加删除修改二叉树。
树 二叉树 各种操作 删除叶节点 返回宽度 高度 等
这是我们在学习数据结构是上机实践编的小程序,现在想和大家分享,上面实现了二叉树的各种操作,如返回叶节点,宽度,高度,各种形式的遍历,查找,本程序中用到了很多递归,虽然这些教材上都有,我还是传上来了.


