我需要使用O(1)的时间来精确二分搜索树的高度我能想到的唯一方法就是检查添加和删除方法增加全局计数器是否还有其他方式是什么?
答案 0 :(得分:3)
O(1)时间表明你应该在请求时已经有了高度。
最好的方法是在添加/删除新节点时保持/更新正确的值。您正在以正确的方式进行此操作,但这会增加添加和删除的复杂性。
您可以采用多种方式,例如将深度值与树中的节点一起保持等等。
class Node{
int depth;
Object value;
}
Node lowestNode;
我可以考虑将最大深度节点参考存储在对象中并将其保持为深度。因此,无论何时添加新元素,都可以根据其父元素检查元素的深度,如果新元素具有更多深度,则替换最大深度节点。
如果要删除最大深度节点,则将其替换为父节点,否则沿树递归校正所有元素的深度。
树的高度为lowestNode.depth
答案 1 :(得分:2)
存储高度属性并在执行添加/删除时更新它应该是最合理的解决方案。
如果树保证平衡(例如AVL),您可以按树中元素的数量计算高度(您必须保留元素数量:P)