树
二叉树
class Node(object):
def __init__(self, item):
self.elem = item
self.left_child = None
self.right_child = None
class Tree(object):
def __init__(self):
self.root = None
''' 向树的最后添加节点 (满二叉树)-> 广度优先 or 层次遍历
本质:队列形式'''
def add(self, item):
node = Node(item)
if self.root is None:
self.root = node
return
else:
queue = [self.root]
while queue is not None:
cur_node = queue.pop(0)
if cur_node.left_child is None:
cur_node.left_child = node
return
else:
queue.append(cur_node.left_child)
if cur_node.right_child is None:
cur_node.right_child = node
return
else:
queue.append(cur_node.right_child)
''' Breadth-first Traversal'''
def bfs(self):
if self.root is None:
return
else:
queue = [self.root]
while queue:
cur_node = queue.pop(0)
print(cur_node.elem, end=" ")
if cur_node.left_child is not None:
queue.append(cur_node.left_child)
if cur_node.right_child is not None:
queue.append(cur_node.right_child)
''' Depth-first Traversal'''
''' pre-oder '''
def pre_order(self, node):
if node is None:
return
print(node.elem, end=" ")
self.pre_order(node.left_child)
self.pre_order(node.right_child)
''' in-order '''
def in_order(self, node):
if node is None:
return
self.in_order(node.left_child)
print(node.elem, end=" ")
self.in_order(node.right_child)
''' post-order '''
def post_order(self, node):
if node is None:
return
self.post_order(node.left_child)
self.post_order(node.right_child)
print(node.elem, end=" ")
if __name__ == "__main__":
tree = Tree()
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.bfs()
print(" ")
tree.pre_order(tree.root)
print(" ")
tree.in_order(tree.root)
print(" ")
tree.post_order(tree.root)