我正在尝试在将新元素插入AVL树时更新Insert
操作。
对insert
操作的更新将向每个节点添加其根树的大小。
现在,因为我自下而上插入我的元素,然后如果我只是为我在巡回演出时传递的每个节点添加+1
,那么在某些情况下这不起作用,例如我需要时在新树不平衡后平衡树,因为我改变了指针,那么计算就不正确了。
任何想法或暗示我该如何正确地做到这一点?
答案 0 :(得分:1)
一个简单的解决方案可能是简单地使用大小的定义来修改它。
将叶子size = 1
,以及作为游览的一部分的每个节点提供给根,或者是滚动的一部分(来自buttom up)集:
size(v) = size(v.left) + size(v.right) + 1
^ ^ ^
size of left size of right size of "root"
subtree subtree
这是正确的,因为您在每个步骤中修改了所有已更改的顶点,并且由于您这样做,但是可以为您修改的每个节点正确计算大小。
请注意,它不会影响复杂性,因为对于每个这样的顶点 - 您正在执行恒定数量的OP,并且您只对要运行的顶点执行此操作。