二叉搜索树 [3,2,1,5,4,6] 如何正确但 [3,4,5,1,2] 无效?

How is the Binary Search Tree [3,2,1,5,4,6] correct but [3,4,5,1,2] is not Valid?

为什么二叉搜索树 [3,2,1,5,4,6] 正确但 [3,4,5,1,2] 无效?

对于第一个,二叉搜索树绘制在此处的图像中

对于第二个,二叉搜索树绘制在此处的图像中

所以我的问题是,为什么第一个二叉搜索树 [3 2 1 5 4 6] 在我们到达 5 之后,树被分解到右节点,但是在第二个二叉搜索树 [3 4 5 1 2] 中,红色的数字 1 和 2 不在左节点分支中,即使它小于根节点,在第一个 [3 2 1 5 4 6] 为什么在 3 2 1 之后 5 不在 1 的右节点?我们什么时候知道根节点需要分裂到另一边,或者根什么时候不应该分裂但应该在已经开始的路径上继续分裂?

why is it for the first Binary Search Tree [3 2 1 5 4 6] the tree is broken to a right node after we reach 5

在then-existing树中插入5时,发现它大于根(3),因此为其创建了一个right-child:

    3
   / \
  2   5
 /
1

然后将 4 和 6 相加,它们也都大于根节点,因此它们也最终位于树的右侧。

but in the second Binary search tree [3 4 5 1 2] the number 1 and 2 in red are not in the left node branch even though it less than the root node

插入1时,比根节点(3)少,所以应该插入left-child。它永远不会在右子树中结束,因为根的右子树只允许有不小于根的值,所以 1 和 2 不允许在那里。当插入 1 时,我们应该得到这个:

    3
   / \
  1   4
       \
        5

并且当插入2时,它也必须在根的左子树中结束。但是因为它大于1,所以它会变成那个节点的右child:

    3
   / \
  1   4
   \   \
    2   5

in the first one [3 2 1 5 4 6] why isn't 5 at the right node of 1 after 3 2 1?

因为插入过程总是从顶层开始,从根开始,那里我们发现5大于根,所以肯定不会在左子树结束。

When do we know the root node needs to split to the other side

这不是真正的“分裂”,而是得到一个新的child。所以这实际上是将新值与根值进行比较的问题。这很容易:当值小于根时,它应该进入左子树(如果存在)或成为左 child(如果还存在 none)。如果值大于根,它应该向右走。如果还没有权限child,应该创建。