【问题标题】:Height of binary search tree in constant time常数时间内二叉搜索树的高度
【发布时间】:2013-03-04 01:48:04
【问题描述】:

我需要用 O(1) 的时间来微调二叉搜索树的高度,我能想到的唯一方法是检查添加和删除方法,增加全局计数器是否有其他方法怎么办?

【问题讨论】:

  • 您需要多精确?如果它是平衡的,它应该是 log n。 log n 可以近似为值 n 中的有效位数。

标签: java binary-search-tree


【解决方案1】:

O(1) 时间表明您应该已经拥有请求时的高度。

最好的方法是在添加/删除新节点时保持/更新正确的值。你这样做是对的,但是它增加了添加和删除的复杂性。

您可以通过多种方式做到这一点,例如将深度值与树中的节点一起保持等。

class Node{
int depth;
Object value;
}

Node lowestNode;

我可以考虑将最大深度节点引用存储在一个对象中并将其保存为 depth 。因此,无论何时添加新元素,都可以根据其父元素检查元素的深度,如果新元素具有更大的深度,则替换最大深度节点。

如果您要删除最大深度节点,则将其替换为父节点,否则沿树递归地更正所有元素的深度。

树的高度是lowestNode.depth

【讨论】:

    【解决方案2】:

    为高度存储一个属性并在添加/删除时更新它应该是最合理的解决方案。

    如果保证树是平衡的(例如 AVL),你可以通过树中元素的数量来计算高度(你必须保持元素的数量:P)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多