Hello 算法 1.0.0 C语言版updateHeight(node); updateHeight(child); // 返回旋转后子树的根节点 return child; } 2. 左旋 相应地,如果考虑上述失衡二叉树的“镜像”,则需要执行图 7‑28 所示的“左旋”操作。 图 7‑28 左旋操作 同理,如图 7‑29 所示,当节点 child 有左子节点(记为 grand_child )时,需要在左旋中添加一步:将 grand_child 作为 node 的右子节点。 第 7 章 树 hello‑algo.com 168 图 7‑29 有 grand_child 的左旋操作 可以观察到,右旋和左旋操作在逻辑上是镜像对称的,它们分别解决的两种失衡情况也是对称的。基于对称 性,我们只需将右旋的实现代码中的所有的 left 替换为 right ,将所有的 right 替换为 left ,即可得到左 旋的实现代码: ,仅使用左旋或右旋都无法使子树恢复平衡。此时需要先对 child 执行“左旋”, 再对 node 执行“右旋”。 图 7‑30 先左旋后右旋 4. 先右旋后左旋 如图 7‑31 所示,对于上述失衡二叉树的镜像情况,需要先对 child 执行“右旋”,再对 node 执行“左旋”。 第 7 章 树 hello‑algo.com 169 图 7‑31 先右旋后左旋 5. 旋转的选择 图 7‑32 展0 码力 | 390 页 | 17.63 MB | 1 年前3
Hello 算法 1.1.0 C语言版updateHeight(node); updateHeight(child); // 返回旋转后子树的根节点 return child; } 2. 左旋 相应地,如果考虑上述失衡二叉树的“镜像”,则需要执行图 7‑28 所示的“左旋”操作。 图 7‑28 左旋操作 同理,如图 7‑29 所示,当节点 child 有左子节点(记为 grand_child )时,需要在左旋中添加一步:将 grand_child 作为 node 的右子节点。 第 7 章 树 hello‑algo.com 169 图 7‑29 有 grand_child 的左旋操作 可以观察到,右旋和左旋操作在逻辑上是镜像对称的,它们分别解决的两种失衡情况也是对称的。基于对称 性,我们只需将右旋的实现代码中的所有的 left 替换为 right ,将所有的 right 替换为 left ,即可得到左 旋的实现代码: ,仅使用左旋或右旋都无法使子树恢复平衡。此时需要先对 child 执行“左旋”, 再对 node 执行“右旋”。 图 7‑30 先左旋后右旋 4. 先右旋后左旋 如图 7‑31 所示,对于上述失衡二叉树的镜像情况,需要先对 child 执行“右旋”,再对 node 执行“左旋”。 第 7 章 树 hello‑algo.com 170 图 7‑31 先右旋后左旋 5. 旋转的选择 图 7‑32 展0 码力 | 391 页 | 18.51 MB | 1 年前3
Hello 算法 1.2.0 简体中文 C语言 版updateHeight(node); updateHeight(child); // 返回旋转后子树的根节点 return child; } 2. 左旋 相应地,如果考虑上述失衡二叉树的“镜像”,则需要执行图 7‑28 所示的“左旋”操作。 图 7‑28 左旋操作 同理,如图 7‑29 所示,当节点 child 有左子节点(记为 grand_child )时,需要在左旋中添加一步:将 grand_child 作为 node 的右子节点。 第 7 章 树 www.hello‑algo.com 169 图 7‑29 有 grand_child 的左旋操作 可以观察到,右旋和左旋操作在逻辑上是镜像对称的,它们分别解决的两种失衡情况也是对称的。基于对称 性,我们只需将右旋的实现代码中的所有的 left 替换为 right ,将所有的 right 替换为 left ,即可得到左 旋的实现代码: ,仅使用左旋或右旋都无法使子树恢复平衡。此时需要先对 child 执行“左旋”, 再对 node 执行“右旋”。 图 7‑30 先左旋后右旋 4. 先右旋后左旋 如图 7‑31 所示,对于上述失衡二叉树的镜像情况,需要先对 child 执行“右旋”,再对 node 执行“左旋”。 第 7 章 树 www.hello‑algo.com 170 图 7‑31 先右旋后左旋 5. 旋转的选择 图 7‑320 码力 | 392 页 | 18.52 MB | 10 月前3
共 3 条
- 1













