AVL树非递归

问题描述 投票:1回答:2

我正在学习AVL Tree并在递归代码中获得TLE。我的导师建议迭代解决方案。我搜索并找到一个解决方案,将父节点保存在子节点中。我不知道这个可能会在内存中出现问题,不是吗?还有另一种方法可以在AVL树中插入,删除不需要在子节点中保存父节点吗?请给我一个提示。

avl-tree non-recursive
2个回答
3
投票

实现AVL树时有几种选择: - 递归或迭代 - 存储平衡因子(右侧高度减去左侧高度)或高度 - 存储父级参考

递归高度倾向于提供最优雅的解决方案,但迭代在某些情况下可能表现更好,因此值得考虑。您可以阅读有关选择:http://www.eternallyconfuzzled.com/tuts/datastructures/jsw_tut_avl.aspx并查看Java中的迭代实现:https://github.com/dmcmanam/bbst-showdown


0
投票

在迭代(非递归)方法中需要父引用,因为在插入/删除之后需要回溯,我们可以在递归方法中使用堆栈进行回溯,而我们只能在迭代方法中使用父引用进行回溯。见https://en.wikipedia.org/wiki/AVL_tree#Inserthttps://en.wikipedia.org/wiki/AVL_tree#Delete

在插入之后,有必要检查节点的每个祖先是否与AVL树的不变量一致:这称为“回溯”。

这是C:https://github.com/xieqing/avl-tree中基于BalanceFactor的迭代AVL树实现

© www.soinside.com 2019 - 2024. All rights reserved.