使用中序遍历查找树中最大值的Python程序
二叉搜索树(Binary Search Tree,简称BST)是一种数据结构,每个节点最多有两个子节点,并且左子树的值小于或等于父节点的值,右子树的值大于父节点的值。在BST中,我们可以使用中序遍历来遍历树中所有的节点,同时也能够保证遍历的结果是有序的。
在BST中,最大值一定是出现在右子树的最右边的节点中。因此,为了查找BST中的最大值,我们可以先对树进行中序遍历,然后找到遍历结果中的最后一个节点即可。
下面是一个使用Python语言实现中序遍历查找BST中最大值的示例代码:
class Node:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Tree:
def __init__(self, root=None):
self.root = root
def insert(self, val):
node = Node(val)
if self.root is None:
self.root = node
return
curr = self.root
while True:
if curr.val > val:
if curr.left is None:
curr.left = node
break
else:
curr = curr.left
else:
if curr.right is None:
curr.right = node
break
else:
curr = curr.right
def inorder(self, node, res):
if node is None:
return
self.inorder(node.left, res)
res.append(node.val)
self.inorder(node.right, res)
def get_max(self):
res = []
self.inorder(self.root, res)
return res[-1]
上面的代码中,我们首先定义了一个BST的节点类Node,包含节点的值val和左右子节点left和right三个属性。然后,我们定义了一个Tree类,其中包含BST的根节点root属性,并实现了一个insert方法用于在BST中插入节点。
接下来,我们实现了一个inorder方法来进行中序遍历,并用一个res参数来存储遍历结果。注意,我们在inorder中先遍历左子树,再将当前节点的值加入到res中,最后再遍历右子树,以保证遍历结果是有序的。
最后,我们实现了一个get_max方法来获取BST中的最大值。该方法首先调用inorder方法遍历树并得到遍历结果,在遍历结果中找到最后一个元素并返回即可。
接下来我们来测试一下该函数:
tree = Tree()
tree.insert(5)
tree.insert(3)
tree.insert(7)
tree.insert(2)
tree.insert(4)
tree.insert(6)
tree.insert(8)
print(tree.get_max()) # 8
上面的代码中,我们先构造了一棵BST,并使用insert方法插入了一些节点。然后,我们调用了get_max方法,输出了BST中的最大值。这里输出的结果为8,符合我们的预期。
结论
通过中序遍历的方式,我们可以高效地找到BST中的最大值。在实现中,我们可以利用递归的方式来进行中序遍历,并将遍历结果存储在一个数组中,最后在数组中找到最后一个元素即可得到BST中的最大值。