二叉排序树(包括AVL及红黑树等变种)如何处理相等的元素?

donald870209 2012-05-09 04:43:18
在插入时,欲插入一个已在树中存在的元素该如何进行?最终插入的位置是什么?

在查找时,欲查元素在树中存在于几个结点中,如何把它们全部找到(也可以说是统计给定元素在树中的个数)?
...全文
1674 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengjiankang 2012-05-22
  • 打赏
  • 举报
回复
问这个问题就等同于问。
排序的时候如果2个数相同。
怎么排序。
如果你的tree不允许Key重复。
不插入就好。
如果允许Key重复。
则当做大于先前的Key来处理就好了。
也就是说。Key的compare按照<和>=来分。
不要问为什么。
因为那样是用来保证先插入的Key在查询的时候在前面的。
当然也要看你实现是否正确了。
donald870209 2012-05-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 2 楼 的回复:

你可以在平衡树的结点里多加一个数据项,用来记录某个key值出现的次数,这样满足你的要求吗


是这样的,如果不加这一项,那么插入的时候会还会分配一个节点,这样就有点浪费空间了,用 int counter记录次数,删除的时候counter--即可,当counter==0时便将节点删除。
[/Quote]

如果这样,岂不是每个节点都多一个空间?我觉得比单纯多分配一个节点更浪费。不知道有谁知道STL里multimap是怎么做的?
DeDeWo 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

你可以在平衡树的结点里多加一个数据项,用来记录某个key值出现的次数,这样满足你的要求吗
[/Quote]

是这样的,如果不加这一项,那么插入的时候会还会分配一个节点,这样就有点浪费空间了,用 int counter记录次数,删除的时候counter--即可,当counter==0时便将节点删除。
小班得瑞 2012-05-10
  • 打赏
  • 举报
回复
你可以在平衡树的结点里多加一个数据项,用来记录某个key值出现的次数,这样满足你的要求吗
freud.wy 2012-05-10
  • 打赏
  • 举报
回复
貌似每个元素的key值是不能重复的吧。
昵称很不好取 2012-05-09
  • 打赏
  • 举报
回复
1,一般是元素重复了就不让插入了
2,如果有重复,也是在左右子树查找,道理是一样的

33,009

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧