我在自己的代码上用 C++ 实现 AVL 树,但这个问题更多的是关于理解AVL 树而不是代码本身。如果它不适合这里,我很抱歉,但我已经通过互联网爬行,但我仍然没有找到解决我的问题的方法。
我的代码在相对较小的输入(~25-30 位)下按预期工作,所以我想它应该可以工作更多。我正在使用一个数组,在其中保存我在插入期间访问过的节点,然后使用 while 循环我在需要时提高每个节点的高度,我知道当我找到一个高度相等的节点时,这个过程必须结束(他们的减法结果是0就是)。
问题是在平衡方面。虽然我可以找到每个节点的平衡因子并正确平衡树,但我不确定是否应该在平衡后停止调整高度并结束插入循环或继续执行直到条件成立,我只是想不通现在出来了。我知道在删除节点和重新平衡树期间,我应该继续检查,但我不确定插入和平衡。
任何人都可以对此提供任何见解,也许还有一些文档?