class Node: def __init__(self, val): self.value = val self.lchild = None self.rchild = None class Tree: def __init__(self): self.root = None def add(self, val): node = Node(val) 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 else: queue = [self.root] while queue != []: cur_node = queue.pop(0) print(cur_node.value, 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 preorder(self, node): if node is None: return print(node.value, end=' ') self.preorder(node.lchild) self.preorder(node.rchild) def preorder_1(self, node): if node is None: return node_list = [] p = node while p or node_list != []: while p: node_list.append(p) print(p.value, end=' ') p = p.lchild if node_list != []: p = node_list.pop() p = p.rchild # 中序遍历 def inorder(self, node): if node is None: return self.inorder(node.lchild) print(node.value, end=' ') self.inorder(node.rchild) def inorder_1(self, node): if node is None: return node_list = [] p = node while p or node_list != []: while p: node_list.append(p) p = p.lchild if node_list != []: p = node_list.pop() print(p.value, end=' ') p = p.rchild # 后序遍历 def postorder(self, node): if node is None: return self.postorder(node.lchild) self.postorder(node.rchild) print(node.value, end=' ') def postorder_1(self, node): res = [] if not node: return res stack = [node] while stack: node = stack.pop() res.append(node.value) if node.lchild: stack.append(node.lchild) if node.rchild: stack.append(node.rchild) return res[::-1] 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.breadth_travel() print('\n') tree.preorder(tree.root) print('\n') tree.preorder_1(tree.root) print('\n') tree.inorder(tree.root) print('\n') tree.inorder_1(tree.root) print('\n') tree.postorder(tree.root) print('\n') print(' '.join(map(str, tree.postorder_1(tree.root)))) print('\n')
来源:51CTO
作者:guohui_0907
链接:https://blog.csdn.net/guohui_0907/article/details/101108187