二叉搜索树在常数时间内的高度



我需要用O(1)的时间来确定二叉搜索树的高度,我能想到的唯一方法是在添加和删除方法中进行检查,增加全局计数器,还有其他方法吗?

0(1)的时间建议你应该已经有高度时,它的请求。

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

你可以有很多方法,比如保留深度值和树中的节点等。

class Node{
int depth;
Object value;
}
Node lowestNode;

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

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

树的高度为,lowestNode.depth

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

如果树被保证是平衡的(例如AVL),你可以计算树中元素的数量的高度(你必须保持元素的数量虽然:p)

最新更新