java - 有重复的 BST

标签 java binary-tree binary-search-tree

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

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

    R
    /\
   A  S
    \
     B

如果我们想在树中包含重复项怎么办。树会怎么变?我在采访中被问到这个问题。

他们让我画:

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

感谢任何帮助!

PS:帮我画出相关的树

最佳答案

在没有重复的情况下插入二叉搜索树的规则是:

  1. 如果元素小于根则向左走
  2. 如果元素大于根,则向右走。

要允许重复条目,您必须像下面这样修改规则:

  1. 如果元素小于或等于根则向左走
  2. 如果元素大于根,则向右走。

  1. 如果元素小于root则向左走
  2. 如果元素大于或等于根,则向右走。

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

所以你的 BST 单词 "RABSAB" 可以像这样:

     R
    / \
   A   S
  / \
 A   B
    /
   B

或者,

     R
    / \
   A   S
    \
     A
      \
       B
        \
         B

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

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

第三种情况更容易维护。

所有这些都已成功使用以允许重复,现在选择权在你!

关于java - 有重复的 BST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16727871/

相关文章:

java - 如何将具有完整月份名称的字符串日期转换为 java 中的日期对象?

java - 用于字母识别的神经网络

java - JSON元素从单个变为列表

java - 如何优化将具有多个字符串和图像的条目插入到 SQLite 数据库中

function - 使用二叉树对整数上的中缀算术表达式进行编码

algorithm - 对于给定的二叉树找到最大的二叉搜索子树

c++ - 指针错误

c++ - 使用二叉搜索树查找数组中第k个最小的元素

c++ - 二叉搜索树中的插入错误

Java二叉搜索树递归删除删除元素