平衡二叉树的节点删除也可能会导致平衡二叉树失衡。为了能用节点数平衡法做删除操作,这里只探讨节点数平衡因子衡量的平衡二叉树。其步骤如下:
(1)找到需要删除的节点:创建一个列表放从根节点到被删节点的列表,列表中的没一项是节点和它与父节点的关系(左:-1;右:1;根节点0)的元组(node,pflag)。
(2)删除的节点:节点只有左子树或右子树,左子树或右子树上移;如果左子树或右子树都有,当节点的节点数平衡因子大于0时,删除出左子数最大值替换该节点值;当节点的节点数平衡因子不大于0时,删除出右子数最小值替换该节点值(方法已在上一课中描述)。
(3)修正节点数平衡因子:如果删除路径中有节点,倒序更新点数平衡因子。如果节点与下一个节点的关系是左(-1),那么该节点的节点数平衡因子减1;如果节点与下一个节点的关系是左右(1),那么该节点的节点数平衡因子加1。
(4)平衡调整:把路径中的节点抽出来组成一个列表,调用路径平衡方法(上一课已描述),完成。
程序代码:
运行结果:
练习题1:把上例改成删除4、1或9看看树还能保持平衡不?
学思营编程课堂基于蓝桥STEM86平台https://www.stem86.com,开展学编程三部曲:
Scratch(三年级以前)>>>Python(四年级以后)>>>C++(七年级以后)教育实验活动,任何人可以免费参加,打开https://xuesiying.stem86.com网页注册进入课堂,也可关注本公众号留言。
更多课程请打开“学思营”同步网站:
http://www.5xstar.com/doc.html
参考资料:
1、《Python算法图解》何韬编著 清华大学出版社