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

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

当需要使用中序遍历查找树中最大值时,创建一个二叉树类,其中包含设置根元素、使用递归执行中序遍历等方法。

创建类的实例并可以用它来访问这些方法。

下面是同样的示例 −

例子

class BinaryTree_Struct:
    def __init__(self, key=None):
        self.key = key
        self.left = None
        self.right = None

    def set_root(self, key):
        self.key = key

    def inorder_traversal_largest(self):
        largest = []
        self.inorder_largest_helper_fun(largest)
        return largest[0]

    def inorder_largest_helper_fun(self, largest):
        if self.left is not None:
            self.left.inorder_largest_helper_fun(largest)
        if largest == []:
            largest.append(self.key)
        elif largest[0] < self.key:
            largest[0] = self.key
        if self.right is not None:
            self.right.inorder_largest_helper_fun(largest)

    def insert_to_left(self, new_node):
        self.left = new_node

    def insert_to_right(self, new_node):
        self.right = new_node

    def search_elem(self, key):
        if self.key == key:
            return self
        if self.left is not None:
            temp = self.left.search_elem(key)
        if temp is not None:
            return temp
        if self.right is not None:
            temp = self.right.search_elem(key)
            return temp
        return None

my_instance = None

print('菜单(这假定没有重复的键)')
print('在根处插入<数据>')
print('在<数据>的左侧插入<数据>')
print('在<数据>的右侧插入<数据>')
print('最大值')
print('退出')

while True:
    my_input = input('你要执行什么操作?').split()

    operation = my_input[0].strip().lower()
    if operation == 'insert':
        data = int(my_input[1])
        new_node = BinaryTree_Struct(data)
        suboperation = my_input[2].strip().lower()
        if suboperation == 'at':
            my_instance = new_node
        else:
            position = my_input[4].strip().lower()
            key = int(position)
            ref_node = None
            if my_instance is not None:
                ref_node = my_instance.search_elem(key)
            if ref_node is None:
                print('没有这个键')
                continue
            if suboperation == 'left':
                ref_node.insert_to_left(new_node)
            elif suboperation == 'right':
                ref_node.insert_to_right(new_node)

    elif operation == 'largest':
        if my_instance is None:
            print('树是空的')
        else:
            print('最大的元素是 : {}'.format(my_instance.inorder_traversal_largest()))

    elif operation == 'quit':
        break

输出

菜单(这假定没有重复的键)
在根处插入<数据>
在<数据>的左侧插入<数据>
在<数据>的右侧插入<数据>
最大值
退出
你要执行什么操作?在根处插入8
你要执行什么操作?在8的左侧插入9
你要执行什么操作?在8的右侧插入4
你要执行什么操作?最大值
最大的元素是 : 9
你要执行什么操作?> 使用quit()或Ctrl-D(即EOF)退出

解释

  • 创建带有必需属性的 ‘BinaryTree_struct’ 类。

  • 它具有一个 ‘init’ 函数,用于将左侧和右侧节点设置为 ‘None’。

  • 它具有一个 ‘set_root’ 方法,用于帮助设置二叉树的根。

  • 另一个名为 ‘inorder_traversal_largest’ 的方法使用递归执行中序遍历。

  • 因此,其旁边定义了一个辅助函数。

  • 另一个名为 ‘insert_to_right’ 的方法被定义,用于帮助将元素添加到根节点的右侧。

  • 定义了一个名为 ‘insert_to_left’ 的方法,用于将元素添加到根节点的左侧。

  • 定义了一个名为 ‘search_elem’ 的方法,用于帮助查找特定元素。

  • 创建了一个 ‘BinaryTree_struct’ 类的对象。

  • 接受用户输入要执行的操作。

  • 根据用户的选择,执行相应的操作。

  • 在控制台上显示相关输出。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程