如何解决有人可以验证RedBlack Tree后继者的书写是否正确吗?
|pair<K,V> *RedBlackTree<K,V,Compare>::successor(K key) {
Node *found = findNode(key,root);
Node *p;
Node *ch;
Node *x;
Node *y;
if(found->right != sentinel)
return new pair<K,V>(found->right->key,found->right->value);
y = found->parent;
/* if it does not have a left child,predecessor is its first left ancestor */
while(y != NULL && found == y->right) {
found = y;
y = y->parent;
}
return new pair<K,V>(y->key,y->value);
}
解决方法
该代码不正确。考虑以下树:
b
/ \\
a f
/ \\
d g
/ \\
c e
b
的有序后继是c
。您的函数认为有序后继是f
。要找到有序的后继者,您必须处理几种情况。该示例树具有需要处理的每种情况的实例。从每个节点开始,并写下为每个节点找到顺序后继者所需的步骤。
如果您有兴趣,可以在我对另一个问题的回答中找到带有完整说明的算法实现。
无关紧要的是,您的函数几乎肯定应该按值返回std::pair
,并且您不应该动态分配std::pair
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。