Python实现二叉树(4种遍历,含层序遍历)

Python实现二叉树(4种遍历,含层序遍历)

code

class TreeNode(object):
    def __init__(self, data=None, left=None, right=None):
        self.data = data
        self.left = left
        self.right = right


class BinaryTree(object):
    def __init__(self, data_list):
        self.it = iter(data_list)
        self.root = TreeNode()
        self.create_tree()

    def inorder_create(self, bt=None):
        try:
            data = next(self.it)
            if data == '#': bt = None
            else:
                bt = TreeNode(data)
                bt.left = self.inorder_create(bt.left)
                bt.right = self.inorder_create(bt.right)
        except Exception as e:
            print(e)
        return bt

    def create_tree(self):
        self.root = self.inorder_create()
        print('binary tree is succussfully created!')

    def preorder(self, bt: TreeNode):
        if bt:
            self.preorder(bt.left)
            print(bt.data, end=' ')
            self.preorder(bt.right)

    def inorder(self, bt: TreeNode):
        if bt:
            print(bt.data, end=' ')
            self.inorder(bt.left)
            self.inorder(bt.right)

    def postorder(self, bt: TreeNode):
        if bt:
            self.postorder(bt.left)
            self.postorder(bt.right)
            print(bt.data, end=' ')

    def leverl_order(self, bt: TreeNode):
        q = []
        q.append(bt)
        while len(q):
            tmp = q.pop(0)
            print(tmp.data, end=' ')
            if tmp.left:
                q.append(tmp.left)
            if tmp.right:
                q.append(tmp.right)

    def traverse(self):
        print('先序遍历:',end='')
        self.preorder(self.root)
        print('\n中序遍历:', end='')
        self.inorder(self.root)
        print('\n后序遍历:', end='')
        self.postorder(self.root)
        print('\n层序遍历:', end='')
        self.leverl_order(self.root)
        print()


if __name__ == '__main__':
    s = '123##4##56##78##9##'
    bt = BinaryTree(s)
    bt.traverse()

  • result

binary tree is succussfully created!
先序遍历:3 2 4 1 6 5 8 7 9 
中序遍历:1 2 3 4 5 6 7 8 9 
后序遍历:3 4 2 6 8 9 7 5 1 
层序遍历:1 2 5 3 4 6 7 8 9 

猜你喜欢

转载自blog.csdn.net/qq_42991793/article/details/87924211