skywind3000 / avlmini

AVL implementation which is as fast/compact as linux's rbtree
MIT License
347 stars 53 forks source link

avl_tree_replace如果修改key值会出问题 #1

Closed zybbigpy closed 5 years ago

zybbigpy commented 5 years ago

您好,最近我在阅读您avltree的源代码, 并编译通过。不过我发现一个小问题就是使用

void avl_tree_replace(struct avl_tree *tree, void *victim, void *newdata);

这个函数时,如果newdata的key与victim的key相同,两个节点也会交换,但是树不会重构,这里是不是会有小问题呢?谢谢。

skywind3000 commented 5 years ago

replace 本来就是替换同个 key 的节点用的,你要改 key 的值你是要删除老的,再添加新的,怎么可能用 replace 改了 key 值,还想保持平衡呢?

zybbigpy commented 5 years ago

是的,我明白了,只是我单步跟踪的时候发现代码并没有在replace的时候保护key不被改变。谢谢您的回答,刚学完数据结构,看您的代码受益很多。