【发布时间】:2021-12-15 11:51:41
【问题描述】:
我正在尝试实现 AVL 树作为一种实践。对于插入和删除操作,我的实现首先执行正常的 BST 插入和删除,然后沿着父链检查和修复任何不平衡的子树。但是,当不平衡节点的子节点的平衡因子为 0 时,我不确定如何在 zig-zig 和 zig-zag 情况之间做出决定。我想在这种情况下我可以选择任何一个,但这并不为删除工作。
假设树看起来像这样,我想删除 78,
再平衡方法会走到 70(根),发现它不平衡,那么问题来了:因为 44 的平衡因子为 0,我应该在 70-44-33 上执行 Zig-zig 案例吗?还是 70-44-48 的 Zig-zag 案?
后者将无法平衡树。围绕 44 的左旋转,然后围绕 70 的右旋转将产生以下结果:
另一方面,zig-zig 案例(向右旋转 70 圈)是正确的方法:
【问题讨论】:
标签: algorithm data-structures binary-tree avl-tree