我正在尝试实现一个自上而下展开的 Splay 树,就像这里描述的那样(http://www.nocow.cn/index.php/Code:Splay_Tree/C)(第一个)。我已经实现了一个自下而上的展开版本,它还在每个节点处维护子树大小,其中子树是该节点的根节点(即 size = 1 + left->size + right->size)。
与每个展开操作一样,我将一个节点向上移动到根,没有必要在每次旋转时更新所有祖先。但是现在在自上而下的版本中,我不明白如何在每个节点(和其他类型的不变量)处维护这个子树大小的值,而不用每次旋转递归地更新祖先。
简而言之,当我进行自上而下的展开操作时,如何保持每个节点的子树大小?(如果有上面提到的页面上描述的 splay 操作的修改版本会很好)