AVL删除元素

来源:12-7 从AVL树中删除元素

tom睡着了

2018-09-04

老师您好,在平衡二叉树可以添加重复值的节点的条件下,好像不可以复用remove(node, value)方法

http://img.mukewang.com/szimg/5b8e535d0001349616130997.jpg

在这种情况下是否只能使用removeMin(),并且在removeMin()中添加维护平衡的代码?

写回答

2回答

liuyubobobo

2018-09-04

是的。我的课程中的二分搜索树,平衡二叉树,都是基于set或者map的假设,其中的值(map中的键值)不允许有重复。如果有重复元素,需要额外的处理(即是multiset):)


印象里,在讲二分搜索树的时候,也相应的给大家留了这样一个思考问题,对于我们实现的二分搜索树,如何支持可以存储相同的元素,那么相应的,在AVL和红黑树的部分,有兴趣也可以思考同样的问题:)


你已经很精准的定位了问题,你需要保证在删除8的时候,找到的8的后继,是黄色的9,而不是绿色的9:)


P.S. 其实,在实践中,MultiSet并不是很有用,因为在需要存储重复元素的情况下,我们可以转而使用普通的Map,其中每一个键对应的值,即为这个键出现的次数。所以,在Java的标准库中,根本不提供MultiSet这样的一个数据结构!:)


加油!:)

1
1
tom睡着了
谢谢老师!回复的好快!
2018-09-04
共1条回复

tom睡着了

提问者

2018-09-04

谢谢老师!回复的好快!

0
0

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程