"""
02.树的广度优先遍历
完全二叉树的 add
"""
def getId(o):
if o is None:
return None
return hex(id(o))[7:]
class Node:
def __init__(self, item):
self.item = item
self.lPoi = None
self.rPoi = None
class Tree:
def __init__(self):
self.root = None
def add(self, item):
"""
添加节点 往树添加一个节点 并保证添加后的树是一个完全二叉树
从上往下 从左往右 遍历树 找到树的空位
把节点添加进去
:param item: 添加节点的值
:return:
"""
print('-' * 80)
oNode = Node(item)
if not self.root:
print(item)
self.root = oNode
return
items = [self.root]
while True:
aItem = items.pop(0)
print(item, getId(aItem), aItem.item, not aItem.lPoi, not aItem.rPoi)
if not aItem.lPoi:
aItem.lPoi = oNode
return
elif not aItem.rPoi:
aItem.rPoi = oNode
return
items.extend((aItem.lPoi, aItem.rPoi))
if __name__ == '__main__':
oT = Tree()
for _ in range(10):
oT.add(_)
"""
_:0 | n0 | root:n0 | n0=None,None
_:1 | n1 | [r] | p-n0 | n0.0=n1
_:2 | n2 | [r] | p-n0 | n0.1=n2 | n0=n1,n2
_:3 | n3 | [r] | p-n0 n0=n1,n2 [n0=n1,n2] | p-n1 | n1.0=n3
_:4 | n4 | [r] | p-n0 n0=n1,n2 [n0=n1,n2] | p-n1 | n1.1=n4 | n1=n3,n4
_:5 | n5 | [r] | p-n0 n0=n1,n2 [n0=n1,n2] | p-n1 n1=n3,n4 [n2,n1=n3,n4] | p-n2 n2.0=n5
_:6 | n6 | [r] | p-n0 n0=n1,n2 [n0=n1,n2] | p-n1 n1=n3,n4 [n2,n1=n3,n4] | p-n2 n2.1=n6 n2=n5,n6
_:7 | n7 | [r] | p-n0 n0=n1,n2 [n0=n1,n2] | p-n1 n1=n3,n4 [n2,n1=n3,n4] | p-n2 n2=n5,n6 [n3,n4,n5,n6] p-n3 n3.0=None,n7
"""
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3ba84f68dd72ae5c92a2504c931c51d6.png)