class Node(object):#创建节点类型
def __init__(self,item):
self.elem = item#节点的值
self.lchild = None#左节点
self.rchild = None#右节点
class Tree(object):
def __init__(self):#默认的根节点是None
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.lchild == None:#该节点的左子节点为None时,添加到该子节点上
cur_node.lchild = node
return
else:
queue.append(cur_node.lchild)#添加左子节点到队列,方便后续调用
if cur_node.rchild == None:
cur_node.rchild = node
return
else:
queue.append(cur_node.rchild)
def breach_travel(self):#广度遍历
if self.root == None:
return
queue = [self.root]
while queue:
cur_node = queue.pop(0)
if cur_node.lchild:
queue.append(cur_node.lchild)
if cur_node.rchild:
queue.append(cur_node.rchild)
print(cur_node.elem)
def preorder(self,tree):#前序遍历
if tree == None:
return
print(tree.elem)
self.preorder(tree.lchild)
self.preorder(tree.rchild)
def midorder(self,tree):#中序遍历
if tree == None:
return
print(tree.elem)
self.midorder(tree.lchild)
self.midorder(tree.rchild)
def postorder(self,tree):#后续遍历
if tree == None:
return
print(tree.elem)
self.postorder(tree.lchild)
self.postorder(tree.rchild)
if __name__ == '__main__':
tree = Tree()#创建二叉树实例
for i in range(10):#循环从列表中添加子节点
tree.add(i)
print('breach_travel')
tree.breach_travel()
print('preorder')
tree.preorder(tree.root)
print('midorder')
tree.midorder(tree.root)
print('postorder')
tree.postorder(tree.root)
二叉树的实现,前,中,后,广遍历
最新推荐文章于 2021-10-21 16:38:21 发布