Python数据结构与算法——第二十七课 平衡二叉树的节点删除

  平衡二叉树的节点删除也可能会导致平衡二叉树失衡。为了能用节点数平衡法做删除操作,这里只探讨节点数平衡因子衡量的平衡二叉树。其步骤如下:

  (1)找到需要删除的节点:创建一个列表放从根节点到被删节点的列表,列表中的没一项是节点和它与父节点的关系(左:-1;右:1;根节点0)的元组(node,pflag)

  (2)删除的节点:节点只有左子树或右子树,左子树或右子树上移;如果左子树或右子树都有,当节点的节点数平衡因子大于0时,删除出左子数最大值替换该节点值;当节点的节点数平衡因子不大于0时,删除出右子数最小值替换该节点值(方法已在上一课中描述)。

  (3)修正节点数平衡因子:如果删除路径中有节点,倒序更新点数平衡因子。如果节点与下一个节点的关系是左(-1),那么该节点的节点数平衡因子减1;如果节点与下一个节点的关系是左右(1),那么该节点的节点数平衡因子加1

  (4)平衡调整:把路径中的节点抽出来组成一个列表,调用路径平衡方法(上一课已描述),完成。

  程序代码: 

 

 

 

 

 

 

 

 

 

 

 

  运行结果:

 

 

  练习题1:把上例改成删除419看看树还能保持平衡不?

 

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

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

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

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

 

参考资料:

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