美文网首页
二叉树的Python代码实现

二叉树的Python代码实现

作者: nonoBoy | 来源:发表于2017-12-19 20:18 被阅读169次
#-*-coding: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) #pop第一个元素
            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 breath_travel(self):
        '''广度遍历'''
        if self.root is None:
            return

        queue = [self.root]
        while queue:
            cur_node = queue.pop(0)
            print(cur_node.elem)
            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.elem)
        self.preorder(node.lchild)
        self.preorder(node.rchild)

    def middleorder(self, node):
        '''先序遍历'''
        if node is None:
            return
        self.middleorder(node.lchild)
        print(node.elem)
        self.middleorder(node.rchild)

    def postorder(self, node):
        '''先序遍历'''
        if node is None:
            return
        self.postorder(node.lchild)
        self.postorder(node.rchild)
        print(node.elem)

if __name__ == '__main__':
    tree = Tree()
    tree.add(1)
    tree.add(2)
    tree.add(3)
    tree.add(4)
    tree.add(5)
    tree.breath_travel()
    print('---先序遍历---')
    tree.preorder(tree.root)
    print('---中序遍历---')
    tree.middleorder(tree.root)
    print('---后序遍历---')
    tree.postorder(tree.root)


相关文章

网友评论

      本文标题:二叉树的Python代码实现

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