Java 为什么二叉搜索树倾向于向右不平衡?

Java 为什么二叉搜索树倾向于向右不平衡?,java,algorithm,tree,binary-tree,binary-search-tree,Java,Algorithm,Tree,Binary Tree,Binary Search Tree,这是第8课幻灯片 Add、peek和remove对我来说很有意义,因为为什么这些操作都是O(logn)——每次移动之后,通过BST将树切成两半。有谁能解释最后一句话背后的直觉,即“树倾向于向右不平衡”?为什么不离开呢?对我来说,它应该是平衡的,因为平均法则,就像元素的频率小于根,随着时间的推移,元素的频率大于根 不要想得太多。这仅仅是因为remove操作总是转到最左边的元素并将其删除。经过几次这样的操作后,不管根节点或任何其他内容如何,最终都会导致树在树的右侧变得“更重” 即使您有一个非常高值

这是第8课幻灯片


Add、peek和remove对我来说很有意义,因为为什么这些操作都是O(logn)——每次移动之后,通过BST将树切成两半。有谁能解释最后一句话背后的直觉,即“树倾向于向右不平衡”?为什么不离开呢?对我来说,它应该是平衡的,因为平均法则,就像元素的频率小于根,随着时间的推移,元素的频率大于根

不要想得太多。这仅仅是因为
remove
操作总是转到最左边的元素并将其删除。经过几次这样的操作后,不管根节点或任何其他内容如何,最终都会导致树在树的右侧变得“更重”


即使您有一个非常高值的根节点,它倾向于将新添加的元素推到左侧,您最终还是会在左侧得到一个“右重”的子树。这仅仅是因为
remove
操作总是转到最左边的元素并将其删除。经过几次这样的操作后,不管根节点或任何其他内容如何,最终都会导致树在树的右侧变得“更重”


即使您有一个非常高值的根节点,它倾向于将新添加的元素推到左侧,您最终还是会在左侧得到一个“右重”的子树。

为什么remove“总是转到最左边的元素”?如果是
remove(49);删除(9)
?或者这个
remove()
总是
remove(min())
?(如果是这样的话…)@user2864740该评论是专门针对一个用作优先级队列的BST的。@Davidisenstat那么这一句话(评论)应该可以消除混淆-除了顶部的“PQ”之外,在问题或回答中再也没有提到过它。@user2864740整个讲座都是关于优先级队列的,幻灯片上只有这么多的空间。啊,我看到你总是从最左边移除,所以你的右边当然有一个不平衡的树。为什么移除“总是转到最左边的元素”?如果是
remove(49);删除(9)
?或者这个
remove()
总是
remove(min())
?(如果是这样的话…)@user2864740该评论是专门针对一个用作优先级队列的BST的。@Davidisenstat那么这一句话(评论)应该可以消除混淆-除了顶部的“PQ”之外,在问题或回答中再也没有提到过它。@user2864740整个讲座都是关于优先级队列的,幻灯片上只有这么多的空间。啊,我看到你总是从最左边移开,所以你的右边当然有一棵不平衡的树。