树的遍历 python实现

匿名 (未验证) 提交于 2019-12-02 22:51:30
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') 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!