AVL树:向每个节点添加一个新字段:其树的“大小”,而Insert操作

时间:2012-05-29 07:07:32

标签: algorithm graph-algorithm avl-tree

我正在尝试在将新元素插入AVL树时更新Insert操作。 对insert操作的更新将向每个节点添加其根树的大小。

现在,因为我自下而上插入我的元素,然后如果我只是为我在巡回演出时传递的每个节点添加+1,那么在某些情况下这不起作用,例如我需要时在新树不平衡后平衡树,因为我改变了指针,那么计算就不正确了。

任何想法或暗示我该如何正确地做到这一点?

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,并且您只对要运行的顶点执行此操作。