基于左右子子树大小的平衡二叉搜索树

时间:2017-01-30 09:54:36

标签: algorithm tree binary-search-tree

我有两个问题:

  1. 近乎平衡的BST和近乎完整的二叉树之间有什么区别。即使前者的定义很明确,我们也可以区分,但不能得到相关的文章。

  2. 今天,在我的班上,我被告知要平衡的条件是:

      

    max(size(root.left),size(root.right))< = 3 * n / 4 ------------(eqn 1) 。
      因此,H(n)=遵循上述属性的n个节点的树的高度< = 1 + H(3 * n / 4)   继续递归步骤,我们得到了logn的界限。

    我的问题是,这是一种特定类型的BST吗?例如,在AVL树的情况下,我记得条件是左右孩子的高度差异最大为1,或者这是更一般的结果,并且可以减少前面所述的等式1以证明结果对于AVL树也是如此?即任何平衡的BST都会导致兄弟姐妹的身高差异达到1? 如果它与AVL不同,我们如何在这种新树中管理插入和删除操作?

  3. 编辑:如果你能解释为什么只有3 * n / 4? 我的想法:这是因为我们可以肯定地说H(n)<= 1 + H(3 * n / 4),因为如果我们采取像3n / 5小于3n / 4那么H(3n / 5) )不一定小于H(2n / 5),因为3n / 5和2n / 5的raio小于2,并且我们知道节点数量的因子为2会使高度增加1。 所以我们肯定不会写H(n)<= 1 + H(3n / 5),它也可能是H(2n / 5)代替H(3n / 5),我是对的吗?

1 个答案:

答案 0 :(得分:0)

  1. 几乎完整 BST是一个BST,其中所有级别都被填充,除了最后一个级别。定义在这里搞砸了(有些人称这个属性完美)。有关此问题,请参阅wikipedia 平衡是一个不太严格的标准,即所有(几乎)完整的BST都是平衡的,但并非所有平衡的BST都是完整的。在那篇维基百科文章中也是一个定义。我的世界是BST是平衡的,如果它导致O(log n)运营成本。

  2. 例如,可以说,如果每个子树最多具有epsilon * n个节点,那么BST是平衡的,其中epsilon <1。 1(例如epsilon = 3/4或甚至epsilon = 0.999 - 它们实际上 根本不平衡)。 原因是这样的BST的高度大致为log_ {1 / epsilon} n = log_2 n /( - log_2 epsilon)= O(log n),但1 /( - log_2 0.99)= 99.5是一个巨大的不变。您可以尝试使用epsilon = 1/2的通常比例来证明这两个子树的大小大致相同。

  3. 我不知道使用3/4的普通BST。常见的BST例如是Red-Black-TreesSplay-Trees或 - 如果您在硬盘上 - 是B-Trees的整个系列。对于您的示例,您可以通过使用两个整数来表示每个节点来实现操作,这两个整数分别表示左侧和右侧子树中的节点数。当插入或删除某些内容时,您会在从根到叶子(或向上)时更新数字,如果条件有效,则进行轮换。