使用中序遍历查找树中最大值的Python程序

使用中序遍历查找树中最大值的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中的最大值。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程