
红黑树如何执行修改操作?
我查过很多红黑树介绍,都只说明了如何进行插入和删除操作,如果是进行修改操作呢?即更改树中一个节点的key值,该如何操作保持红黑树性质?当然我也可以先删除那个修改点,再把修...
我查过很多红黑树介绍,都只说明了如何进行插入和删除操作,如果是进行修改操作呢?即更改树中一个节点的key值,该如何操作保持红黑树性质?
当然我也可以先删除那个修改点,再把修改点当成新点插入,这样的复杂度也是O(lgn),不过系数会比较大,我想了解有没有更好的办法。
我不是不理解红黑树,我也是参照《算法导论》写了个红黑树,比你写的还多一个区间查找功能……但问题是还没有看到相关资料讨论过自平衡树的修改操作(包括AVL树我也没见过),我自己想的结果是由于修改操作的最坏可能性,似乎“修改=删除+重新添加”是最可行的办法了。我想知道高手们是否对自平衡树的修改操作有更多想法。 展开
当然我也可以先删除那个修改点,再把修改点当成新点插入,这样的复杂度也是O(lgn),不过系数会比较大,我想了解有没有更好的办法。
我不是不理解红黑树,我也是参照《算法导论》写了个红黑树,比你写的还多一个区间查找功能……但问题是还没有看到相关资料讨论过自平衡树的修改操作(包括AVL树我也没见过),我自己想的结果是由于修改操作的最坏可能性,似乎“修改=删除+重新添加”是最可行的办法了。我想知道高手们是否对自平衡树的修改操作有更多想法。 展开
1个回答
展开全部
红黑树解释起来比较麻烦,里面有一些树节点的旋转工作,我有编好的程序,也是搞了n多天才搞定的。你先看看(代码是C++的)。里面实现了其节点插入、删除、遍历、前驱、后继等接口。
程序太长,没法拷贝过来,到我的博客去看吧。
如果程序没法理解,请查看麻省理工的《算法导论》中文版关于二叉查找树和红黑树的章节,里面有详细介绍和很多伪代码,我的代码就是参考伪代码写出来的。
=============最新回复==============
不知道你所说的修改是什么意思,是修改卫星数据还是修改key值?
如果是修改卫星数据,那么不需要改动树结构;
如果是修改key值,那么愚以为,删除和插入两个操作相加是最好的办法,因为即使两者操作叠加,时间复杂度也不会超过log(n)
麻省理工的《算法导论》中文版卓越网上有热卖哦:-)
程序太长,没法拷贝过来,到我的博客去看吧。
如果程序没法理解,请查看麻省理工的《算法导论》中文版关于二叉查找树和红黑树的章节,里面有详细介绍和很多伪代码,我的代码就是参考伪代码写出来的。
=============最新回复==============
不知道你所说的修改是什么意思,是修改卫星数据还是修改key值?
如果是修改卫星数据,那么不需要改动树结构;
如果是修改key值,那么愚以为,删除和插入两个操作相加是最好的办法,因为即使两者操作叠加,时间复杂度也不会超过log(n)
麻省理工的《算法导论》中文版卓越网上有热卖哦:-)
参考资料: http://blog.163.com/scn_2001_ren/blog/static/69845881200872410163654/

2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询