Python实现二叉树

发布时间:2019-07-02 13:36:38编辑:auto阅读(954)

    二叉树算法python实现:
    1.添加节点
    2.广度优先遍历
    3.深度优先遍历:先序遍历,中序遍历,后序遍历

    # -*- codding:utf-8 -*-
    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 bread_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_travel(self,node):
            """前序遍历"""
            if node is None:
                return
            print(node.elem,end = " ")
            self.pre_travel(node.lchild)
            self.pre_travel(node.rchild)
    
        def mid_travel(self,node):
            """中序遍历"""
            if node is None:
                return
            self.mid_travel(node.lchild)
            print(node.elem,end = " ")
            self.mid_travel(node.rchild)
    
        def post_travel(self,node):
            """后序遍历"""
            if node is None:
                return
            self.post_travel(node.lchild)
            self.post_travel(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.bread_travel()
        print(" ")
        tree.pre_travel(tree.root)
        print(" ")
        tree.mid_travel(tree.root)
        print(" ")
        tree.post_travel(tree.root)
    
    # 0 1 2 3 4 5 6 7 8 9    层次遍历
    # 0 1 3 7 8 4 9 2 5 6    前序遍历
    # 7 3 8 1 9 4 0 5 2 6    中序遍历
    # 7 8 3 9 4 1 5 6 2 0    后序遍历
    

关键字