我要罚二叉搜索树的高度为O的时间(1)我能想到的唯一办法做到这一点是把检查的添加和删除方法递增全局计数器是有没有其他办法?
Answer 1:
O(1)时间建议你应该已经有高度时,被请求。
最好的办法是保持/更新每当一个新的节点添加/删除正确的值。 你正在做它在一个正确的方式,但它增加了对添加和删除的复杂性。
你可以这样做的方式数,如保持深度值与树等节点一起
class Node{
int depth;
Object value;
}
Node lowestNode;
我能想到的存储对象的最大深度节点参考,并保持该深度。 所以每当你添加新的元素,你可以查看基于其父元素的深度和更换最大深度节点,如果新的元素有更深入。
如果要删除的最大深度节点,然后与家长代替它,否则纠正沿树递归所有elments的深度。
树的高度, lowestNode.depth
Answer 2:
储存的高度属性和更新它,当你正在做的添加/删除应该是最合理的解决方案。
如果树是保证平衡(如AVL),就可以计算出在树中元素的个数高度(你必须保持元素的数量虽然:P)
文章来源: Height of binary search tree in constant time