C AVL树实现的新特性

C AVL树实现的新特性,c,algorithm,tree,binary-tree,avl-tree,C,Algorithm,Tree,Binary Tree,Avl Tree,我正在写一个滑动窗口压缩算法(LZ77),在“移动”字典中搜索短语 到目前为止,我已经编写了一个BST,其中每个节点都存储在一个数组中,它在数组中的索引也是窗口本身中起始位置的值 我现在正在考虑将BST转换为AVL树。我对所看到的示例实现有点困惑。有些似乎只存储平衡因子,而另一些则存储每棵树的高度 存储每个节点的高度和/或平衡因子是否有性能优势/劣势?如果这是一个非常简单的问题,我深表歉意,但我仍然没有设想如何重组我的BST以实现高度平衡 谢谢。平衡仅仅是两个高度之间的差异,因此不应该有任何显著

我正在写一个滑动窗口压缩算法(LZ77),在“移动”字典中搜索短语

到目前为止,我已经编写了一个BST,其中每个节点都存储在一个数组中,它在数组中的索引也是窗口本身中起始位置的值

我现在正在考虑将BST转换为AVL树。我对所看到的示例实现有点困惑。有些似乎只存储平衡因子,而另一些则存储每棵树的高度

存储每个节点的高度和/或平衡因子是否有性能优势/劣势?如果这是一个非常简单的问题,我深表歉意,但我仍然没有设想如何重组我的BST以实现高度平衡


谢谢。

平衡仅仅是两个高度之间的差异,因此不应该有任何显著的性能差异,除非整数减法的实现非常缓慢。;)如果只将高度存储为整数,而不将两者压缩为单个整数,则存储高度可能需要更多内存,因为平衡保证了对最大高度的实际限制,因此可以安全地进行存储。但是过早的优化,你知道。。。有了高度,您就有了更多的可用信息,当您只有余额可用时,您需要通过额外的子树遍历来计算这些信息,但这取决于您的需求


我建议您深入学习本·普法夫(Ben Pfaff)关于BSTs的精彩介绍:

谢谢您的链接。我想如果你想储存高度而不是平衡因子,你必须爬上树做修正直到树根。我想平衡因素也是如此。