使用BFS遍历创建树的镜像副本并显示的Python程序
当需要创建树的镜像副本并使用广度优先搜索来显示时,需要创建一个二叉树类,其中包括设置根元素、将元素插入到左侧、将元素插入到右侧、搜索特定元素、执行后序遍历等方法。创建类的实例后,它可以用于访问这些方法。
以下是相同的演示:-
更多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 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
def copy_mirror(self):
mirror = BinaryTree_struct(self.key)
if self.right is not None:
mirror.left = self.right.copy_mirror()
if self.left is not None:
mirror.right = self.left.copy_mirror()
return mirror
def bfs(self):
queue = [self]
while queue != []:
popped = queue.pop(0)
if popped.left is not None:
queue.append(popped.left)
if popped.right is not None:
queue.append(popped.right)
print(popped.key, end=' ')
my_instance = None
print('Menu (this assumes no duplicate keys)')
print('insert <data> at root')
print('insert <data> left of <data>')
print('insert <data> right of <data>')
print('mirror')
print('quit')
while True:
my_input = input('What operation would you do ? ').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('No such key exists..')
continue
if suboperation == 'left':
ref_node.insert_to_left(new_node)
elif suboperation == 'right':
ref_node.insert_to_right(new_node)
elif operation == 'mirror':
if my_instance is not None:
print('Creating a mirror copy...')
mirror = my_instance.copy_mirror()
print('The breadth first search traversal of original tree is : ')
my_instance.bfs()
print()
print('The breadth first traversal of mirror is : ')
mirror.bfs()
print()
elif operation == 'quit':
break
输出
Menu (this assumes no duplicate关键字)
在根插入
在左边插入
在右边插入
镜像
退出
你想做什么操作?
插入6到根
在6的左侧插入9
在6的右侧插入4
镜像
创建镜像副本...
原树的广度优先搜索遍历:
6 9 4
镜像的广度优先遍历:
6 4 9
退出
解释
-
创建了具有必要属性的“BinaryTree_struct”类。
-
它有一个“init”函数,用于将左右节点分配为“None”。
-
定义了一个名为“set_root”的方法,帮助将根节点分配给一个值。
-
它有一个名为“insert_to_left”的方法,帮助将元素添加到树的左节点中。
-
它有一个名为“insert_to_right”的方法,帮助将元素添加到树的右节点中。
-
它有一个名为“bfs”的方法,帮助对树执行广度优先搜索遍历。
-
定义了一个名为“search_elem”的方法,帮助搜索特定元素。
-
它有一个名为“copy_mirror”的方法,帮助创建二叉树的副本。
-
创建了一个实例并分配给“None”。
-
接受用户输入以进行需要执行的操作。
-
根据用户的选择执行操作。
-
在终端显示相关输出。