#encoding=utf-8
class Node:
def __init__(self,value):
self.var = value
self.left = None
self.right = None
class BinaryTree:
def __init__(self):
self.root = None
def add(self, value):#此方法为二叉树添加一个节点
node = Node(value) #把值封装到node节点里面
if self.root is None:#二叉树是否为空
self.root = node #插入的节点变为了根节点
else:#二叉树里面已经有节点
q = [self.root] #把根节点放到一个列表里面
#q列表被当做一个队列来使用。
while True:
pop_node = q.pop(0)
if pop_node.left is None:
#如果左节点是空,那么插入新的节点
pop_node.left = node
return
elif pop_node.right is None:
#如果右节点是空,那么插入新的节点
pop_node.right = node
return
else:
q.append(pop_node.left)
q.append(pop_node.right)
#类似广度遍历的思想,逐一节点
#从最上次节点开始查找,空的位置
#找到空的位置就插入,然后return
def traverse(self): # 二叉树的广度遍历的程序
if self.root is None:
return None
q = [self.root]
res = [self.root.var]
while q != []:
pop_node = q.pop(0)
if pop_node.left is not None:
q.append(pop_node.left)
res.append(pop_node.left.var)
#print(q)
if pop_node.right is not None:
q.append(pop_node.right)
res.append(pop_node.right.var)
return res
t = BinaryTree()
for i in range(10):
t.add(i)
print('层序遍历:',t.traverse())
2019-05-31:创建二叉树
猜你喜欢
转载自blog.csdn.net/sinat_18722099/article/details/90714714
今日推荐
周排行