BFS & DFS

作者: Jack_Hsin | 来源:发表于2018-06-17 22:55 被阅读0次
    class Node(object):
        def __init__(self, item):
            self.elem = item
            self.lchild = None
            self.rchild = None
    
    class Tree(object):
        """二叉树"""
        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 preorder(self, node):
            """先序遍历"""
            #遍历整棵树,先把根节点node传进来
            if node is None:
                return
            print(node.elem, end = " ")  #因为是先序遍历,就应该把根节点的元素打印出来
            self.preorder(node.lchild)  #然后再判断根节点的左子树,把它当作子树对待
            self.preorder(node.rchild)  #然后再处理右子树,用递归的方法
    
        def inorder(self, node):
            """中序遍历"""
            if node is None:
                return
            self.inorder(node.lchild)
            print(node.elem, end = " ")
            self.inorder(node.rchild)
    
        def postorder(self, node):
            """后序遍历"""
            if node is None:
                return
            self.postorder(node.lchild)
            self.postorder(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)
        tree.breadth_travel()
        print(" ")
        tree.preorder(tree.root)
        print(" ")
        tree.inorder(tree.root)
        print(" ")
        tree.postorder(tree.root)
    

    相关文章

      网友评论

          本文标题:BFS & DFS

          本文链接:https://www.haomeiwen.com/subject/azxtsftx.html