Python数据结构与算法——第三十四课 红黑树的删除

  红黑树节点的删除同样会使红黑树失衡。调整的方法大概和添加节点相反。比如,变红与变黑互换;左旋与右旋互换。

  算法逻辑:

  (1)如果被删除的节点是叶节点(左右都是空黑节点)直接删除。

  (2)如果只有一侧不为空黑节点,用这侧节点代替被删节点。

  (3)如果两侧都不是空黑节点,用右侧最小节点值替代被删节点,被删节点保留,删除右侧最小节点。

  (4)如果实际删除的节点原来颜色是黑色,需要进行平衡调整:

  (4.1)如果删除的节点没有父节点,说明删除了唯一的根节点,整树已空,完成。

  (4.2)当前节点(节点删除后,在那个位置的节点)是红色,改黑色,完成。

  (4.3)兄弟节点是红色,改黑色,旋转,完成。

  (4.4.1)父节点为红色,旋转,完成。

  (4.4.2)父节点为黑色,改红色后旋转,用爷节点作为父节点递归调用,完成。

  程序代码:

 

 

 

 

 

 

 

 

  运行结果:

 

 

 

 

 

  练习题1:改变上例中的测试数据,进行测试。

 

  学思营编程课堂基于蓝桥STEM86平台https://www.stem86.com,开展学编程三部曲:

Scratch(三年级以前)>>>Python(四年级以后)>>>C++(七年级以后)教育实验活动,任何人可以免费参加,打开https://xuesiying.stem86.com网页注册进入课堂,也可关注本公众号留言。

更多课程请打开学思营同步网站:

http://www.5xstar.com/doc.html

 

参考资料:

1、《Python算法图解》何韬编著 清华大学出版社