平衡二叉树的节点删除也可能会导致平衡二叉树失衡,用层数平衡法进行调节恢复平衡。其步骤如下:
(1)找到需要删除的节点:创建一个列表放从根节点到被删节点的列表,列表中的每一项由节点和它与父节点的关系(根节点:0,左:1;右:2)的元组(node,pflag)。
(2)删除的节点:叶节点直接删除;节点只有左子树或右子树,左子树或右子树上移;如果左子树或右子树都有,当节点的层数平衡因子大于0时,删除出左子数最大值替换该节点值;当节点的层数平衡因子不大于0时,删除出右子数最小值替换该节点值。被删节点的列表延伸到真正被删节点。
(3)平衡调整:如果删除路径中有节点(除了真正被删节点外),倒序调节层数平衡因子。完成。
程序代码:
运行结果:
练习1:把上例的列表数据顺序随意打乱,看看运行效果。
学思营编程课堂基于蓝桥STEM86平台https://www.stem86.com,开展学编程三部曲:
Scratch(三年级以前)>>>Python(四年级以后)>>>C++(七年级以后)教育实验活动,任何人可以免费参加,打开https://xuesiying.stem86.com网页注册进入课堂,也可关注本公众号留言。
更多课程请打开“学思营”同步网站:
http://www.5xstar.com/doc.html
参考资料:
1、《Python算法图解》何韬编著 清华大学出版社