• python实现二叉树


    1.二叉树

    • 关于树实际是编程中遇到数据结构,根节点之外每个节点都有一个父节点,根节点没有父节点,除叶子节点之外所有节点都有一个或是多个子叶子节点,父节点何子节点之间通过指针连接(Go/Java有指针的概念,简单说指针就是地址)

    • 二叉树排序方式

      • 广度遍历(层次遍历)
        • 广度优先按照层次,一层一层遍历
      • 深度遍历
        • 前序:根左右(把跟放到最前面)
        • 中序:左根右(把根放到中间)
        • 后序:左右根(把根放到最后)

    2.排序二叉树

    • 代码实现:
    class Node():
        """封装节点对象"""
        def __init__(self,item):
            self.item = item
            self.left = None
            self.right = None
    
    class Tree():
        def __init__(self):
            # 构造出一颗空的二叉树
            # root要指向第一个节点的地址,如果root指向了None,则意味着该二叉树为空
            self.root = None
        def insert(self,item):
            node = Node(item)
            cur = self.root
            if cur is None:
                self.root = node
                return
            while True:
                # 这里用while循环判断根,左,右节点是否为None逐级插入数据
                if item < cur.item:
                    if cur.left is None:
                        cur.left = node
                        return
                    else:
                        cur = cur.left
                else:
                    if cur.right is None:
                        cur.right = node
                        return
                    else:
                        cur = cur.right
        def pre_sequence(self,root):
            #前序
            if root is None:
                return
            print(root.item,end = " ")
            self.pre_sequence(root.left)
            self.pre_sequence(root.right)
        def middle_sequence(self,root):
            #中序
            if root is None:
                return
            self.middle_sequence(root.left)
            print(root.item, end=" ")
            self.middle_sequence(root.right)
        def back_sequence(self,root):
            #后续
            if root is None:
                return
            self.back_sequence(root.left)
            self.back_sequence(root.right)
            print(root.item,end=" ")
            def travel(self,root):
            if root == None:
                return
            cur = root
            # 队列先进先出
            queue = [cur,]
            while queue:
                # 循环,pop,获取pop节点,左右子节点,不为None,加入队列继续循环
                n = queue.pop(0)
                print(n.item, end = " ")
                if n.left != None:
                    queue.append(n.left)
                if n.right != None:
                    queue.append(n.right)
    tree = Tree()
    tree.insert(3)
    tree.insert(8)
    tree.insert(5)
    tree.insert(7)
    tree.insert(6)
    
    tree.pre_sequence(tree.root)#
    print("
    ")
    tree.middle_sequence(tree.root)
    print("
    ")
    tree.back_sequence(tree.root)
    print("
    ")
    tree.travel(tree.root)
    """
    打印结果:
    前序:3 8 5 7 6 
    
    中序:3 5 6 7 8 
    
    后续:6 7 5 8 3
    
    广度:3 8 5 7 6
    """
    
    • 在执行insert方法时最终构建二叉树如下图:

  • 相关阅读:
    raise PDFEncryptionError('Unknown algorithm: param=%r' % param) pdfminer.pdfdocument.PDFEncryptionError: Unknown algorithm
    Hive与Hbase的区别
    HIVE—索引、分区和分桶的区别
    MapReduce编程之Semi Join多种应用场景与使用
    MapReduce编程之Map Join多种应用场景与使用
    MapReduce编程之Reduce Join多种应用场景与使用
    Mapreduce——视频播放数据分类统计
    Docker-compose实战——Django+PostgreSQL
    Docker基础教程
    1.node接口搭建--express搭建服务器
  • 原文地址:https://www.cnblogs.com/xujunkai/p/12341211.html
Copyright © 2020-2023  润新知