本系列实现二叉搜索树修剪!
- 首先按照教材实现了下后序遍历
pot
,思路简单就是:左、右、根,递归实现即可,最后返回后续遍历的节点序列即可,看代码:
def pot(self, *args):
if len(args) == 0:
nodes = []
node = self.Root
else:
node = args[0]
nodes = args[1]
if node.left:
self.pot(node.left, nodes)
if node.right:
self.pot(node.right, nodes)
nodes.append(node.key)
return nodes
测试代码:
A = [8, 3, 10, 1, 6, 14, 4, 7, 13]
print(tree.pot())
输出结果:
[1, 4, 7, 6, 3, 13, 14, 10, 8]
- 接下来实现修剪,修剪的时候使用后序遍历的思路,在树上进行遍历查找符合条件的留下,不符合的修剪掉,最后返回修剪好的树。细化下思路:(1)当前节点在范围内,不做任何变动;(2)当前节点小于最小阈值,则该节点所有左子节点都小于最小阈值,全部修剪,将该节点的右子节点返回给该节点的父节点;(3)当前节点大于最大阈值,则只需将该节点的左子节点返回其父节点即可。
def trimBST(self, minVal, maxVal, *args):
if len(args) == 0:
node = self.Root
else: