python创建二叉树及前中后序、层次遍历

  • Post author:
  • Post category:python


"""
二叉树的创建:
(1)实现二叉树的链式存储结构,创建二叉树
(2)二叉树的前中后序遍历
"""


class BinTree:
    # 二叉树的节点结构,包括存储数据、左指针、右指针
    class TreeNode:
        __slots__ = {'_element', '_left', '_right'}

        def __init__(self, element, left=None, right=None):
            self._element = element
            self._left = left
            self._right = right

    # 二叉树的初始化,初始时为空树,根节点为空
    # ls用于存储节点地址
    def __init__(self):
        self.root = None
        self.ls = []

    # 二叉树的节点插入操作,以创建完全二叉树的形式
    def add(self, data):
        node = self.TreeNode(data)
        # 如果根节点为空,创建根节点,并将根节点写入列表ls中
        if self.root is None:
            self.root = node
            self.ls.append(self.root)
        else:  # 如果根节点存在,就需要创建根节点的孩子
            rootNode = self.ls[0]
            if rootNode._left is None:
                rootNode._left = node
                self.ls.append(rootNode._left)
            elif rootNode._right is None:
                rootNode._right = node
                self.ls.append(rootNode._right)
                self.ls.pop(0)  # 弹出第一个位置的元素,也就是保证每次循环的第一个节点是接下来插入位置的父母节点

    # 前序遍历,根左右
    def preOrderTraversal(self, root):
        if root is None:
            return
        print(root._element, end=' ')
        self.preOrderTraversal(root._left)
        self.preOrderTraversal(root._right)

    # 中序遍历,左根右
    def inOrderTraversal(self, root):
        if root is None:
            return
        self.inOrderTraversal(root._left)
        print(root._element, end=' ')
        self.inOrderTraversal(root._right)

    # 后序遍历,左右根
    def postOrderTraversal(self, root):
        if root is None:
            return
        self.postOrderTraversal(root._left)
        self.postOrderTraversal(root._right)
        print(root._element, end=' ')

    # 层次遍历,也叫广度优先遍历
    def levelOrderTraversal(self, root):
        if root is None:
            return
        queue = []
        result = []
        node = root
        queue.append(node)
        while queue:
            node = queue.pop(0)
            result.append(node._element)
            if node._left is not None:
                queue.append(node._left)
            if node._right is not None:
                queue.append(node._right)
        for i in result:
            print(i, end=' ')

验证:创建一个序号为1-10的完全二叉树

from eighth_chapter.BinTree import BinTree


def createTree(tree):
    for i in range(1, 11):
        tree.add(i)


if __name__ == '__main__':
    bintree = BinTree()
    createTree(bintree)
    print('前序遍历:', end='')
    bintree.preOrderTraversal(bintree.root)
    print()
    print('中序遍历:', end='')
    bintree.inOrderTraversal(bintree.root)
    print()
    print('后序遍历:', end='')
    bintree.postOrderTraversal(bintree.root)
    print()
    print('层次遍历:', end='')
    bintree.levelOrderTraversal(bintree.root)

结果:
E:\python数据结构与算法\day\Scripts\python.exe E:/python数据结构与算法/eighth_chapter/createTree.py
前序遍历:1 2 4 8 9 5 10 3 6 7 
中序遍历:8 4 9 2 10 5 1 6 3 7 
后序遍历:8 9 4 10 5 2 6 7 3 1 
层次遍历:1 2 3 4 5 6 7 8 9 10 
Process finished with exit code 0



版权声明:本文为weixin_40042248原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。