二叉树的节点表示以及树的创建
通过使用Node类中定义三个属性,分别为item本身的值,还有lchild左孩子和rchild右孩子
class Node(object):
"""节点类"""
def __init__(self,item):
self.item = item
self.lchild = None
self.rchild = None
树的创建,创建一个树的类,并给一个root根节点,一开始为空,随后添加节点
class BinaryTree(object):
"""二叉树"""
def __init__(self, node=None): #默认为空意思是可以和列表一样建一个空的节点
self.root = node
def add(self, item):
"""广度优先遍历方式添加节点"""
if self.root is None:
self.root = Node(item)
else:
queue = []
queue.append(self.root)
while len(queue) > 0:
node = queue.pop(0)
if not node.lchild:
node.lchild = Node(item)
return
else:
queue.append(node.lchild)
if not node.rchild:
node.rchild = Node(item)
return
else:
queue.append(node.rchild)
def breadh_travel(self):
"""广度优先遍历"""
if self.root is None:
return
queue = []
queue.append(self.root)
while len(queue) > 0:
node = queue.pop(0)
print(node.item, end=' ')
if node.lchild:
queue.append(node.lchild)
if node.rchild:
queue.append(node.rchild)
tree = BinaryTree()
tree.add(0)
tree.add(1)
tree.add(2)
tree.add(3)
tree.add(4)
tree.add(5)
tree.add(6)
tree.add(7)
tree.add(8)
tree.add(9)
tree.breadh_travel()
结果:
是以队列的形式判断没一个节点下面是否为空,但队列其实是线性表的进一步封装,之前队列部分,实现也是通过列表实现的(满足先进先出且,从一头进一头出,就是队列的实行),所以为了方便,这里直接用列表实现队列的功能。
什么叫广度优先遍历
原文链接:https://blog.csdn.net/yu_1628060739/article/details/106443146