python二叉树的层次、先序、中序和后序遍历
class Node(): "节点" def __init__(self, elem): self.elem = elem self.lchild = None self.rchild = None class Tree(): "二叉树" def __init__(self): self.root = None def add(self, item): node = Node(item) if self.root is None: self.root = node return queue = [self.root] while queue: cur_node = queue.pop(0) if cur_node.lchild is None: cur_node.lchild = node return else: queue.append(cur_node.lchild) if cur_node.rchild is None: cur_node.rchild = node return else: queue.append(cur_node.rchild) def breadth_travel(self): "广度遍历(层次遍历)" if self.root is None: return queue = [self.root] while queue: cur_node = queue.pop(0) print(cur_node.elem, end= " ") if cur_node.lchild is not None: queue.append(cur_node.lchild) if cur_node.rchild is not None: queue.append(cur_node.rchild) def pre_order(self, node): "先序遍历:根-左-右" if node is None: return print(node.elem, end=" ") #根 self.pre_order(node.lchild) #左 self.pre_order(node.rchild) #右 def in_order(self, node): "中序遍历:左-根-右" if node is None: return self.in_order(node.lchild) # 左 print(node.elem, end=" ") #根 self.in_order(node.rchild) #右 def post_order(self, node): "后序遍历:左-右-根" if node is None: return self.post_order(node.lchild) # 左 self.post_order(node.rchild) # 右 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) print("层次") tree.breadth_travel() print("\n先序") tree.pre_order(tree.root) print("\n中序") tree.in_order(tree.root) print("\n后序") tree.post_order(tree.root)