二叉排序树删除指定结点
来源:互联网 发布:商城美工招聘 编辑:程序博客网 时间:2024/05/23 07:22
//总的思路是用待删除的结点的左子树的最大值代替它,就达到删除的目的了。
void BinaryTree::DeleteNode(int data){Node* preNode=NULL;//要删除前的一个结点 Node* pDelNode=root;//要删除的结点//找到要删除的结点while (pDelNode!=NULL){if (pDelNode->info==data){break;}preNode=pDelNode;if (pDelNode->info>data){ pDelNode=pDelNode->lchild;} else{pDelNode=pDelNode->rchild;}} if (pDelNode->lchild==NULL)//待删除结点无左子结点 { if (preNode==NULL)//待删除的是头结点 { root=root->rchild; delete pDelNode; } else { if (preNode->lchild==pDelNode)//待删除的是父结点的左子结点 { preNode->lchild=pDelNode->rchild; delete pDelNode; } else//待删除的是父结点的右子结点 {preNode->rchild=pDelNode->rchild;delete pDelNode; } } } else//有左子结点,在左子树找最大值的结点来代替它 { preNode=pDelNode;//保存它的父节点 Node* pMAX=pDelNode->lchild; while (pMAX->rchild!=NULL)//肯定在右支 { preNode=pMAX;//保存它的父节点 pMAX=pMAX->rchild; } if (preNode==pDelNode)//待删除的结点的左子节点,它无右支结点 { pDelNode->lchild=pMAX->lchild; pDelNode->info=pMAX->info;//把它下一个结点的值复制过来 delete pMAX;//删除这个结点 } else//遍历到最右边,pMAX此时无右子结点 { pDelNode->info=pMAX->info;//把pMAX的值复制过来 preNode->rchild=pMAX->lchild; delete pMAX; } }}
0 0
- 二叉排序树删除指定结点
- 二叉排序树删除某一指定结点
- 二叉排序树删除结点
- 二叉排序树的结点删除
- C++二叉排序树之删除结点
- 二叉排序树删除值小于value的结点
- 二叉排序树的建立、结点插入及删除
- 删除指定值的结点
- 从单链表删除指定结点
- 求出指定结点在给定二叉排序树中所在的层数
- 二叉排序树的创建(结点的插入,删除等操作)
- c++删除单链表指定值结点
- 按规则插入结点,然后删除指定的结点。
- 二叉排序树的创建和遍历与删除指定的节点
- 查找(3)——二叉排序树的建立、结点的查找和删除
- 在O(1)时间删除链表中某指定结点
- 在O(1)时间内删除链表指定结点
- 在O(1)时间删除指定链表结点
- Cocos2d-x-->CCMenuItem菜单项
- 微软2014校园招聘笔试试题
- fork与vfork的区别
- 嵌入式动态内存分配过程
- 计算机网络笔试题
- 二叉排序树删除指定结点
- UVA 106 Fermat vs. Pythagoras
- (《剑指Offer》笔记)调整数组顺序使奇数位于偶数前面
- pty/tty设备竞争条件漏洞 (CVE-2014-0196)
- 号段选取应用之已知号码求号段(读书笔记之一)
- 怎么在MyEclipse中修改项目名称(部署)
- Cocos2d-x初入学堂 --> CCMenuItem菜单项
- IO中同步、异步与阻塞、非阻塞的区别
- 常见算法笔试或面试题