class Node:
'''定义结点'''
def __init__(self, val):
self.val = val
self.left = None
self.right = None
class Tree:
def __init__(self):
self.root = None
def add(self, item):
'''
按广度遍历的方式添加元素,
构建一颗完全二叉树
'''
node = Node(item)
if self.root is None:
self.root = node
return
queue = [self.root]
while queue:
cur_node = queue.pop(0)
if cur_node.left is None:
cur_node.left = node
return
else:
queue.append(cur_node.left)
if cur_node.right is None:
cur_node.right = node
return
else:
queue.append(cur_node.right)
def breadth_travel(self):
'''广度遍历'''
queue = [self.root]
while queue:
cur_node = queue.pop(0)
print(cur_node.val, end=' ')
if cur_node.left is not None:
queue.append(cur_node.left)
if cur_node.right is not None:
queue.append(cur_node.right)
def preorder(self, node):
'''前序遍历'''
if node is None:
return
print(node.val, end=' ')
self.preorder(node.left)
self.preorder(node.right)
def inorder(self, node):
'''中序遍历'''
if node is None:
return
self.inorder(node.left)
print(node.val, end=' ')
self.inorder(node.right)
def postorder(self, node):
'''后序遍历'''
if node is None:
return
self.postorder(node.left)
self.postorder(node.right)
print(node.val, end=' ')
if __name__ == '__main__':
tree = Tree()
for i in range(10, 20):
tree.add(i)
print('广度遍历: ', end='')
tree.breadth_travel()
print()
print('前序遍历: ', end='')
tree.preorder(tree.root)
print()
print('中序遍历: ', end='')
tree.inorder(tree.root)
print()
print('后序遍历: ', end='')
tree.postorder(tree.root)
print()
构建二叉树(广度、前序、中序、后序遍历)
最新推荐文章于 2023-03-19 22:49:43 发布