使用中序遍历查找树中最大值的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’ 类的对象。
-
接受用户输入要执行的操作。
-
根据用户的选择,执行相应的操作。
-
在控制台上显示相关输出。