数据结构之二叉树的遍历

使用python写的二叉树的层序建立和四种遍历方式

# -*- coding: utf-8 -*-


class Point(object):
    """二叉树的结点"""
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None


def build_tree(alist):
    """层序建立二叉树"""
    if alist:
        root = Point(alist.pop(0))
        queue = [root]
        while queue:
            temp = queue.pop(0)
            if alist:
                temp1 = Point(alist.pop(0))
                temp.left = temp1
                queue.append(temp1)
            if alist:
                temp2 = Point(alist.pop(0))
                temp.right = temp2
                queue.append(temp2)
        return root
    else:
        print("空树")
        return


def pre_traverse(root):
    """前序遍历"""
    if root:
        print(root.val, end=" ")
        pre_traverse(root.left)
        pre_traverse(root.right)


def mid_traverse(root):
    """中序遍历"""
    if root:
        pre_traverse(root.left)
        print(root.val, end=" ")
        pre_traverse(root.right)


def post_traverse(root):
    """后序遍历"""
    if root:
        pre_traverse(root.left)
        pre_traverse(root.right)
        print(root.val, end=" ")


def seq_traverse(root):
    """层序遍历"""
    if root:
        queue = [root]
        while queue:
            temp = queue.pop(0)
            if temp:
                print(temp.val, end=" ")
                queue.append(temp.left)
                queue.append(temp.right)
    else:
        print("空树")


if __name__ == '__main__':
    root = build_tree([1,2,3,4,5,6,7])
    print("层序建立二叉树:")
    pre_traverse(root)
    print("\n前序遍历二叉树:")
    mid_traverse(root)
    print("\n中序遍历二叉树:")
    post_traverse(root)
    print("\n层序遍历二叉树:")
    seq_traverse(root)

 

posted @ 2019-06-09 21:22  一人在山旁  阅读(206)  评论(0)    收藏  举报
Live2D