红黑树比较功能

时间:2016-02-17 20:51:22

标签: c algorithm binary-search-tree red-black-tree

我在C中实现了一个红黑树。在C ++地图中,可以提供一个自定义比较,它只执行操作值1<值2。此操作返回true或false但是如何在没有比较操作的情况下实现树?我希望我的比较函数只返回1或0而没有任何==运算符。我尝试在stl中读取它但是代码是不可读的,尽管我有C ++经验。

完整代码不是必需的,因为它与每个其他树实现的代码相同。目前有以下比较功能:

int cmp(void *key1, void *key2){
  if(*(int*)key1 < *(int*)key2){
    return 1;
  }else if(*(int*)key1 > *(int*)key2){
    return -1;
  }else{
    return 0;
  }
}

我想要一个像这样的比较函数:

int cmp(void *key1, void *key2){
  if(*(int*)key1 < *(int*)key2){
    return 1;
  }else{
    return 0;
  }
}

我不明白搜索如何使用此比较功能,因为找到节点时没有停止条件。

2 个答案:

答案 0 :(得分:3)

你可以用严格的不平等来表达平等:

(a == b) <==> !(a < b || b < a)

等价假定比较关系是严格的总排序。这是C ++ Compare类型所要求的,也是树实现中比较函数所必需的。

就二叉树搜索而言,请查看第一个cmp的实现方式。注意它如何仅使用<找出何时返回0。您的实现可以使用第二个cmp完全相同。

答案 1 :(得分:1)

我相信你在谈论使用比较器。如果是这样,enter image description here应该会帮助您。