几分钟搞定二叉排序树的删除节点算法漫谈无代码
2017-11-16 23:28
323 查看
我希望看到我这博客的时候是已经对应生成二叉排序树算法已经很熟悉了,
删除节点的时候 也许我们会删除20那个节点,那么我们只需要把30节点的左子指针域设置null, 然后释放节点20的内存地址,如果想得到被删节点的数据可以返回,
这种节点是叶子节点,既没有孩子节点,比较简单,
还有一种情况比如 40 和85节点 ,只有一个孩子节点,也比较简单,比如40,我们只要把30的右指针域保存40的孩子节点地址就可以,
还有一种复杂情况就是被删除节点有左右孩子节点
假如我们想删除50这个节点,那么我们删除50这个节点之后,需要重新生成排序树,需要做什么呢,我们可以从右子树找个最小节点 ,刚好我们比较得到80是最小那么把50替换成80,在把80的删除。在观察是不是还是二叉排序树呢,是啊。ok了
还有一个办法就是找左子树中最大的节点放在50上比如是40 还是二叉排序树。
删除节点的时候 也许我们会删除20那个节点,那么我们只需要把30节点的左子指针域设置null, 然后释放节点20的内存地址,如果想得到被删节点的数据可以返回,
这种节点是叶子节点,既没有孩子节点,比较简单,
还有一种情况比如 40 和85节点 ,只有一个孩子节点,也比较简单,比如40,我们只要把30的右指针域保存40的孩子节点地址就可以,
还有一种复杂情况就是被删除节点有左右孩子节点
假如我们想删除50这个节点,那么我们删除50这个节点之后,需要重新生成排序树,需要做什么呢,我们可以从右子树找个最小节点 ,刚好我们比较得到80是最小那么把50替换成80,在把80的删除。在观察是不是还是二叉排序树呢,是啊。ok了
还有一个办法就是找左子树中最大的节点放在50上比如是40 还是二叉排序树。
相关文章推荐
- 算法:二叉排序树的删除节点策略及其图形化(二叉树查找)
- 二叉排序树节点的删除(C++,算法导论),前中后序遍历(递归/非递归,栈实现),按层次遍历(队列实现)
- BST二叉排序树的查找和删除的完整C代码
- 数据结构与算法-二叉排序树的删除操作
- 删除节点的jquery代码
- 顺序表的定义、初始化、及插入、删除、查询操作,将算法转化成具体的代码
- PHP 循环删除无限分类子节点的实现代码
- [面试算法题]有序列表删除节点-leetcode学习之旅(4)
- [算法]删除链表的中间节点
- 二叉排序树删除节点
- 一行php代码搞定删除文件、删除目录
- java实现二叉排序树的删除节点
- 应用数据结构(一)线性表节点的插入和删除算法
- [面试算法题]有序列表删除节点-leetcode学习之旅(4)
- 二叉排序树 - 删除节点策略及其图形化(二叉树查找)
- 算法面试之道:在O(1)的时间内删除单链接链表的指定节点
- C++建立查找删除节点二叉排序树
- 单链表 算法(删除中间节点)
- 双链表的定义、初始化、插入、删除,C++代码实现的算法
- 节点node[算法导论]二叉排序树(Binary Search Tree)