当前位置: 首页 > 知识库问答 >
问题:

具有重复项的BST

狄望
2023-03-14

我知道,BST不允许重复。例如,如果我有一个词“RABSAB”。

上述字符串的二进制搜索树是:

    R
    /\
   A  S
    \
     B

如果我们想在树中包含重复项呢。这棵树将如何改变?我在一次采访中被问到这个问题。

他们让我画:

  1. 二叉树
  2. 不平衡二叉搜索树
  3. 没有重复项的二叉搜索树
  4. 具有重复项的二叉搜索树

感谢您的帮助!

PS:帮我画相关的树

共有3个答案

孟英叡
2023-03-14

在正常的BST中,插入和搜索都是基于小于(

您可以尝试在小于等于的位置插入(

或者,可以在每个节点中包含一个数组,以容纳重复的元素。

晏鸿畅
2023-03-14

一个选项是修改树,以便一个分支将包含重复的节点,例如,让左分支保留小于或等于父节点的节点,或者让右分支保留大于或等于父节点的节点

另一种选择是将所有重复项存储在一个节点中,因此

class Node {
    Node left, right;
    Object data;
}

你反而会

class Node {
    Node left, right;
    List data;
}

class Node {
    Node left, right;
    Object data;
    int count;
}
秦宜修
2023-03-14

在没有重复的二进制搜索树中插入的规则是:

  1. 如果元素小于根,则向左移动

要允许重复条目,您必须修改如下规则:

  1. 如果元素的根小于或等于

  1. 如果元素小于root,则向左移动
  2. 如果元素的根大于或等于,则向右移动

  1. 如果元素小于root,则向左移动
  2. 如果元素大于root,则向右转。
  3. 如果元素等于根,则增加计数。

所以你的单词“RABSAB”的BST可以是这样的:

     R
    / \
   A   S
  / \
 A   B
    /
   B

     R
    / \
   A   S
    \
     A
      \
       B
        \
         B

    R(1)
   /  \
  /    \
 A(2)  S(1)
  \
   \
   B(2)

在前两种情况下,插入和搜索都变得有点复杂!你会在这里找到很多解释!

第三种情况更容易维持。

所有这些都被成功地用于允许复制,现在你可以选择了!

 类似资料:
  • 问题内容: 因此,我有一组对象,这些对象的阶跃变量可以为1-4。 然后,我想从具有最大步进值的集合中获取一个实例,因此我这样做: 但是,在某些情况下,集合中将存在多个实例,这些实例的步骤等于4。 因此,我的问题是,如何确定在中返回哪个实例,或者当流中的多个对象具有要比较的最大值时,它是否引发异常? 该函数的Java 8文档未指定在这种情况下会发生什么。 问题答案: 被实现以减少收集: 在这里您可以

  • 问题内容: 我有一个numpy值数组: 我想从数组中删除具有重复值的行。例如,上述数组的结果应为: 我不确定如何使用numpy有效地做到这一点而无需循环(数组可能会很大)。有人知道我该怎么做吗? 问题答案: 这是一个选择:

  • 问题内容: 我必须清理具有重复行的表: 一个可能具有多个值: 我想对整个表执行一个查询,并删除和重复的所有行。在上面的示例中,删除后,我只想剩下1、2、4和5。 问题答案: ;WITH x AS ( SELECT id, gid, url, rn = ROW_NUMBER() OVER (PARTITION BY gid, url ORDER BY id) FROM dbo.table ) SEL

  • 我有两张桌子:订单 订单详情 产品介绍 我想在product_ID1和4的订单详细信息中找到所有记录(因此尝试查看一个订单何时包含这两种产品)。因此运行此代码-INNER JOIN创建一个结果表,该表仅包含包含产品1、4或1和4的订单。 然后我要计算所有“订单详细信息”。order\u ID重复-这些是包含1和4的所有订单(注意-普通数据库-给定订单包含的产品不超过1个)。 这是我的代码-不太管用

  • 问题内容: 我有两个列表,其中包含许多相同的项目,包括重复的项目。我想检查第一个列表中的哪些项不在第二个列表中。例如,我可能有一个这样的列表: 还有一个像这样的列表: 比较这两个列表,我想返回第三个列表,如下所示: 我目前正在使用一些我之前确定的糟糕代码,我可以肯定它甚至无法正常工作,如下所示。 我怎样才能更好地完成这项任务? 问题答案: 您没有指定订单是否重要。如果没有,则可以在> = Pyth

  • 问题内容: 我有一个对象数组,希望根据特定的对象对进行修剪。我想创建一个数组,此特定对仅包含一个对象。将重复项的哪个对象复制到新数组并不重要。 例如,我要基于的属性进行修整,创建一个仅包含每个值之一的新数组: 会成为: 是否存在会循环执行此操作的JavaScript或Angular函数? 编辑:要筛选的属性嵌套在另一个属性中。 问题答案: 您可以为此使用下划线: