【发布时间】:2017-11-06 11:53:38
【问题描述】:
对于 AVL 树,当从需要重组的树中删除一个节点时,我正在阅读的书指出,要遵循某些规则来选择要重组的节点。一个例子是这样的:
44
/ \
17 62
/ \
50 78
/ \ \
48 54 88
这是在删除节点(节点 17 的子节点)并且违反了 height-balance 属性之后的 AVL 树。
我读的书说它会让 z 成为从节点 17 向上遇到的第一个不平衡位置,y 是 z 的高度较大的孩子,最后 x 是 y 的高度较高的孩子。但是,如果 y 的孩子都具有相同的高度,则 x 将与 y 位于同一侧。在这种情况下,x 是 78,y 是 62,z 是 44。
现在这是提出的问题。为什么我们选择 x 使其与 y 位于同一侧?如果我选择 x 与 y 不在同一侧,AVL 树会出现任何问题吗?我试图给自己举个例子,并尝试选择这两种类型的 x 并重组 AVL 树。但是,我似乎找不到任何选择 x 作为孩子的问题。任何帮助都可以帮助我解决这个问题。
【问题讨论】:
-
有趣..你能分享你的分析,你在哪里采取了 x 不是 y 的孩子吗?
-
@KarthikBalaguru 是否有可能让 x 不是 y 的孩子?重组将如何进行?以前没有想到这一点。
-
根据标准的三节点重组方法,它是通过仅将 x 作为 y 的子节点来完成的。简单来说,它是一种针对导致负载不平衡的路径并对其进行修复。因此,为了识别和修复该路径,一旦违反高度平衡,z 将成为第一个不平衡节点,y 应为 z 的最高子节点,x 应为 z 的孙子节点,因此它是 y 的最高子节点。据我所知,三节点重组程序始终如一地说 - 如果 y 的一个孩子高于其他孩子,则 x 是更高的孩子,否则 x 是 y 的孩子,与 y 是 z 的边相同。
标签: data-structures tree binary-search-tree avl-tree