#树
class BTNode(object):
def __init__(self,data,lchild=None,rchild=None):
self.data=data
self.lchild=lchild
self.rchild=rchild
class BTNode_T(object):
def __init__(self,node=None):
self.root=node
#广度搜索方法创建树
def wid_insert(self,data):
node=BTNode(data)
if self.root is None:
self.root=node
return
queue=[self.root]
while queue:
cur=queue.pop(0)
if cur.lchild is not None:
queue.append(cur.lchild)
else:
cur.lchild=node
return
if cur.rchild is not None:
queue.append(cur.rchild)
else:
cur.rchild=node
return
''' 广度遍历(层次遍历) '''
def wid_travel(self):
if self.root is None:
return ' '
queue=[self.root]
while queue:
cur=queue.pop(0)
print cur.data,
if cur.lchild is not None:
queue.append(cur.lchild)
if cur.rchild is not None:
queue.append(cur.rchild)
return ' '
''' 先序遍历(深度遍历):根左右 '''
def pre_travel(self,node):
if node is None:
return ' '
print node.data,
self.pre_travel(node.lchild)
self.pre_travel(node.rchild)
return ' '
''' 中序遍历(深度遍历):左根右 '''
def mid_travel(self,node):
if node is None:
return ' '
self.mid_travel(node.lchild)
print node.data,
self.mid_travel(node.rchild)
return ' '
'''后序遍历(深度遍历):左右根 '''
def post_travel(self,node):
if node is None:
return ' '
self.post_travel(node.lchild)
self.post_travel(node.rchild)
print node.data,
return ' '
tree=BTNode_T()
tree.wid_insert(0)
tree.wid_insert(1)
tree.wid_insert(2)
tree.wid_insert(3)
print '二叉树'
print '广度遍历:',tree.wid_travel()
print '先序遍历:',tree.pre_travel(tree.root)
print '中序遍历:',tree.mid_travel(tree.root)
print '后序遍历:',tree.post_travel(tree.root)