#!/usr/bin/env python
# coding=utf-8
# 二叉树算法
# 创建节点类
class Node(object):
def __init__(self,item):
# 值
self.elem = item
# 左节点
self.lchild = None
# 右节点
self.rchild = None
# 创建树
class Tree(object):
"""二叉树"""
def __init__(self):
# 根节点
self.root = None
# 添加数据
def add(self,item):
"""为树添加节点"""
node = Node(item) # 先构造节点
# 如果根节点为空,则先对根节点赋值
if self.root is None:
self.root = node
else:
# 如果根节点不为空,则把根节点先放到队列中
queue = [self.root]
# 只要队列不为空一直循环
while queue:
# 弹出队列的第一个元素(处理的当前节点)
cur = queue.pop(0)
# 如果左孩子节点为空
if cur.lchild is None:
cur.lchild = node
return
elif cur.rchild is None:
cur.rchild = node
return
else:
# 如果左右子树都不为空,加入队列继续判断
queue.append(cur.lchild)
queue.append(cur.rchild)
def breadth_travel(self):
"""广度遍历"""
# 如果根节点为空
if self.root is None:
return
queue = [self.root]
while queue:
cur = queue.pop(0)
print(cur.elem)
if cur.lchild is not None:
queue.append(cur.lchild)
if cur.rchild is not None:
queue.append(cur.rchild)
if __name__ == "__main__":
tree = Tree()
for i in range(10):
tree.add(i)
tree.breadth_travel()