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)

 

posted @ 2021-08-04 20:53  钟胜一  阅读(174)  评论(0编辑  收藏  举报