许多算法将指定排除重复项 . 例如,MIT算法书中的示例算法通常提供没有重复的示例 . 实现重复(在节点上或在一个特定方向上作为列表)是相当简单的 . )
大多数(我见过)将左边的孩子指定为<=,将右边的孩子指定为> . 实际上,允许右子节点或左子节点等于根节点的BST将需要额外的计算步骤来完成允许重复节点的搜索 .
最好利用节点上的列表来存储重复项,因为在节点的一侧插入'='值需要重写该侧的树以将节点作为子节点放置,或者节点放置为宏-child,在某些点下面,这消除了一些搜索效率 .
您必须记住,大多数课堂示例都经过简化,以描绘和传达概念 . 在许多现实世界的情况下,他们不值得蹲下 . 但是声明“每个元素都有一个键,没有两个元素具有相同的键”,在元素节点上使用列表不会违反 .
那么请关注您的数据结构书所说的内容!
编辑:
二进制搜索树的通用定义涉及基于在两个方向之一上遍历数据结构来存储和搜索密钥 . 从语用意义上讲,这意味着如果值为<>,则以两个“方向”之一遍历数据结构 . 因此,从这个意义上讲,重复的值根本没有任何意义 .
这与BSP或二进制搜索分区不同,但并非完全不同 . 搜索算法有“旅行”的两个方向之一,或者已经完成(成功与否) . 所以我很抱歉我的原始答案没有解决“通用定义”的概念,因为重复实际上是一个独特的主题(成功搜索后处理的内容,而不是二进制搜索的一部分 . )