Algorithm 如何构造二叉搜索树

Algorithm 如何构造二叉搜索树,algorithm,tree,binary-search-tree,Algorithm,Tree,Binary Search Tree,我目前正在学习二进制搜索树,如果我在树中插入以下值: 13, 3, 4, 12, 14, 10, 5, 1, 8, 2, 7, 9, 11, 6, 18 13, 3, 4, 12, 14, 10, 5, 1, 8, 2, 7, 9, 11, 6, 18, 15 然后我的二元搜索树将如下所示: 如果我将另一个编号15添加到我的树中: 13, 3, 4, 12, 14, 10, 5, 1, 8, 2, 7, 9, 11, 6, 18 13, 3, 4, 12, 14, 10, 5, 1, 8

我目前正在学习二进制搜索树,如果我在树中插入以下值:

13, 3, 4, 12, 14, 10, 5, 1, 8, 2, 7, 9, 11, 6, 18
13, 3, 4, 12, 14, 10, 5, 1, 8, 2, 7, 9, 11, 6, 18, 15
然后我的二元搜索树将如下所示:

如果我将另一个编号
15
添加到我的树中:

13, 3, 4, 12, 14, 10, 5, 1, 8, 2, 7, 9, 11, 6, 18
13, 3, 4, 12, 14, 10, 5, 1, 8, 2, 7, 9, 11, 6, 18, 15
我的问题是,第一个问题:

13
  \
   14
    \
     15
      \
       18
或者第二个:

13
  \
   14
     \
      18
      /
     15

15
插入上述二叉搜索树是否正确?

如果您是“普通”BST,则第二个输出是正确的。但是,如果您使用的是平衡BST,则有可能会重新排列树中节点的相对位置。我敢肯定,你正在阅读的那本书(或参考书)一定有关于这个问题的解释。通常,当添加节点时,不对BST的先前结构(即,节点的先前位置)进行修改。然而,这可能导致“不平衡”或“倾斜”的树。这可能导致节点的搜索时间更长。为了解决这个问题,使用了“平衡树”,如红黑树、avl树等。在这样的树中,当添加节点时,通常需要对树结构进行修改。有关更多信息,请参阅以下内容:


两种方法都可以,但第一种方法与当前树的构建方式不一致

具体来说,请看4-12-10部分:

4
 \
 12
 /
10

数据在树中显示的级别在插入时是固定的,并且不会随着添加更多项而更改。这就是为什么第二种方法是您想要的。

根据您的逻辑,第二种方法是正确的方法。我建议你读一下“自平衡二叉搜索树”,两者都是正确的。(有一些算法试图最小化树的高度,以确保快速查找,这包括对某些树形状的偏好。)DasBLink按钮撤回了我的下投票,并从问题中删除了C++标签。