繁体   English   中英

AVL树:向每个节点添加新字段:树的“大小”,同时执行插入操作

[英]AVL tree : adding a new field to each node : the “size” of its tree , while Insert action

我在将新元素插入AVL树时尝试更新Insert动作。 insert动作的更新将为每个节点增加其根目录树的大小。

现在,因为我自下而上插入了元素,所以如果我仅在巡回旅行时为通过的每个节点添加+1 ,则在某些情况下将无法正常工作,例如,当我需要在新树是不平衡的,因为我改变了指针,那么计算将是不正确的。

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

一个简单的解决方案是仅通过定义大小来修改它。

设置叶子的size = 1 ,并为作为根之旅的一部分或作为卷的一部分(从buttom向上)的每个节点设置:

size(v) = size(v.left) + size(v.right) + 1
            ^                 ^          ^
        size of left     size of right   size of "root"
           subtree        subtree     

这将是正确的,因为您在每个步骤中都修改了所有已更改的顶点,并且由于要进行自顶向下的操作,因此可以为您修改的每个节点正确计算大小。

请注意,它不会影响复杂性,因为对于每个这样的顶点-您执行的操作数是恒定的,并且仅对要遍历的顶点进行操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM