python学习----完全二叉树的创建及不同遍历方法的python语法实现

完全⼆叉树

若设⼆叉树的⾼度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最⼤个数,第h层有叶⼦结点,并且叶⼦结点都是从左到右依次排布,这就是完全⼆叉树。
在这里插入图片描述
语法实现:

class Node():
    """结点类"""

    def __init__(self, item):
        self.item = item
        self.lchild = None
        self.rchild = None


class BinayTree():
    """二叉树"""

    def __init__(self, node=None):
        self.root = node

    def add(self, item):
        """
        广度优先遍历(层次遍历)方式添加结点
        :param item:
        :return:
        """
        if self.root is None:
            self.root = Node(item)
        else:
            queue = []  # 或用队列
            queue.append(self.root)

            while len(queue) > 0:
                node = queue.pop(0)
                if not node.lchild:
                    node.lchild = Node(item)
                    return
                else:
                    queue.append(node.lchild)
                if not node.rchild:
                    node.rchild = Node(item)
                    return
                else:
                    queue.append(node.rchild)

    def breadth_travel(self):
        """广度优先遍历"""
        if self.root is None:
            return
        queue = []
        queue.append(self.root)

        while len(queue) > 0:
            node = queue.pop(0)
            print(node.item, end=" ")
            if node.lchild:
                queue.append(node.lchild)
            if node.rchild:
                queue.append(node.rchild)

    def preorder_travel(self,root):
        """先序遍历 根 左 右"""
        if root:
            print(root.item, end=" ")
            self.preorder_travel(root.lchild)
            self.preorder_travel(root.rchild)

    def inorder_travel(self,root):
        """中序遍历 左 根 右"""
        if root:
            self.inorder_travel(root.lchild)
            print(root.item, end=" ")
            self.inorder_travel(root.rchild)

    def postorder_travel(self,root):
        """后序遍历 左 右 根"""
        if root:
            self.postorder_travel(root.lchild)
            self.postorder_travel(root.rchild)
            print(root.item, end=" ")

if __name__ == '__main__':
    tree = BinayTree()
    tree.add(0)
    tree.add(1)
    tree.add(2)
    tree.add(3)
    tree.add(4)
    tree.add(5)
    tree.add(6)
    tree.breadth_travel()
    print("")
    tree.preorder_travel(tree.root)
    print("")
    tree.inorder_travel(tree.root)
    print("")
    tree.postorder_travel(tree.root)
    print("")

结果:

0 1 2 3 4 5 6 
0 1 3 4 2 5 6 
3 1 4 0 5 2 6 
3 4 1 5 6 2 0 

猜你喜欢

转载自blog.csdn.net/weixin_44850984/article/details/89212665