Python 二叉樹

class Tree:
    def __init__(self, ist):
        if not isinstance(ist, tuple) and not isinstance(ist, list) and not isinstance(ist, set):
            raise ValueError
        if len(ist) > 3:
            raise ValueError

        data = list(ist)
        length = 3 - len(ist)
        self.node, self.__left, self.__right = data + [None] * length

    @property
    def left_node(self):
        if isinstance(self.__left, tuple) or isinstance(self.__left, list) or isinstance(self.__left, set):
            return Tree(self.__left)
        return self.__left

    @property
    def right_node(self):
        if isinstance(self.__right, tuple) or isinstance(self.__right, list) or isinstance(self.__right, set):
            return Tree(self.__right)
        return self.__right


def pre_order_traverse(tree: Tree):
    if isinstance(tree, Tree):
        if tree.node is None:
            return
        print(tree.node)
        pre_order_traverse(tree.left_node)
        pre_order_traverse(tree.right_node)
    else:
        if tree is not None:
            print(tree)
        return


def mid_order_traverse(tree: Tree):
    if isinstance(tree, Tree):
        if tree.node is None:
            return
        mid_order_traverse(tree.left_node)
        print(tree.node)
        mid_order_traverse(tree.right_node)
    else:
        if tree is not None:
            print(tree)
        return


def back_order_traverse(tree: Tree):
    if isinstance(tree, Tree):
        if tree.node is None:
            return
        back_order_traverse(tree.left_node)
        back_order_traverse(tree.right_node)
        print(tree.node)
    else:
        if tree is not None:
            print(tree)
        return


if __name__ == '__main__':
    obj = Tree(['-', ['+', 'a', ['*', 'b', ['-', 'c', 'd']]], ['/', 'e', 'f']])
    back_order_traverse(obj)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章