• python 二叉树 层级遍历 前序遍历 中序遍历 后续遍历 简单使用


    """
    二叉树
    author : zhao
    """
    class Node():
        """
        节点类, 二叉树可以看成由无数个节点组成
        """
        def __init__(self, x=-1):
            self.val = x
            self.left = None
            self.right = None
    
    class Tree():
        """
        树类,主要定义一些方法
        """
        def __init__(self):
            """ 初始化 定义一个根节点 """
            self.root = Node()
    
        def add(self, data):
            """ 定义添加二叉树结点方法 切记 add() 函数为添加结点的函数 """
            """ 数据初始化 不要看别的函数  """
            node = Node(data)
            """ 上面定义的-1 表示空 这样才可以向树中诸如元素 """
            if self.root.val == -1:
                self.root = node
            else:
                """ 声明存放结点的列表 每次向二叉树添加节点 都会将二叉树遍历一遍 """
                q = []
                q.append(self.root)
                while q:
                    s = q.pop(0)
                    """ 判断 结点的左右子树是否为空 为空 则将 新添加的元素 赋值到子树上 """
                    if not s.left:
                        s.left = node
                        return
                    elif not s.right:
                        s.right = node
                        return
                    else:
                        """ 如果都不会空 就会添加到q 列表中 将其下一次遍历 下一次遍历 s.left 和 s.right 会被看成 根"""
                        q.append(s.left)
                        q.append(s.right)
    
    
        def sort_recusion(self, root):
            """ 层级遍历 root 为传入的树 """
            """ 先判断根节点是否为空 为空则返回 """
            if root == None:
                return
            q= []
            q.append(root)
            while q:
                s = q.pop(0)
                """ 首先打印每一个个元素 在依次判断每一个结点是否有 左子树和 右子树 有的话 加入列表 用作下一次打印 
                没有则进行下一次循环
                """
                print(s.val, end=', ')
                """ 当s.left 和 s.right 存在的时候 才会将其放入列表中 当作下一次根节点的打印 """
                if s.left:
                    q.append(s.left)
                if s.right:
                    q.append(s.right)
    
    
        def pre_recusion(self, root):
            """  递归实现 前序遍历 """
            """ 每次调用首先 打印根节点 然后先将左子树出入递归函数 当作下一次打印的根节点 """
            if root == None:
                return
            print(root.val, end=', ')
            self.pre_recusion(root.left)
            self.pre_recusion(root.right)
    
        def mid_recusion(self, root):
            """ 递归实现 中序遍历"""
            """ 每次先将左子树传入递归函数 用作下一次根节点打印 然后在进行打印当前根节点 """
            if root == None:
                return
            self.mid_recusion(root.left)
            print(root.val, end=', ')
            self.mid_recusion(root.right)
    
    
        def suf_recusion(self, root):
            """ 递归实现 后序遍历 """
            """ 每一次先将 左子树 右子树 传入递归函数 这样程序就会先去将当前左子树 作为下一次打印的根节点 右子树道理相同 最后打印当前根节点"""
            if root == None:
                return
            self.suf_recusion(root.left)
            self.suf_recusion(root.right)
            print(root.val, end=', ')
    
    if __name__ == "__main__":
        t = Tree()
        """ 调用add() 向二叉树添加结点 """
        for i in range(10):
            t.add(i)
    print("层级遍历 %s" % t.sort_recusion(t.root)) print("前序遍历 %s" % t.pre_recusion(t.root)) print("中序遍历 %s" % t.mid_recusion(t.root)) print("后序遍历 %s" % t.suf_recusion(t.root))

    结果:

    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 层级遍历 None
    0, 1, 3, 7, 8, 4, 9, 2, 5, 6, 前序遍历 None
    7, 3, 8, 1, 9, 4, 0, 5, 2, 6, 中序遍历 None
    7, 8, 3, 9, 4, 1, 5, 6, 2, 0, 后序遍历 None
    邮箱: 1090055252@qq.com
  • 相关阅读:
    【Azure 环境】Azure Resource Graph Explorer 中实现动态数组数据转换成多行记录模式 mvexpand
    【Azure 应用服务】收集App Service 关于Availability Zone, Health check 以及 Traffic Manager的文档,并了解高可用(HA)和灾备(DR)
    【Azure 应用服务】如果发现当前使用的订阅无法在China North 3 区中创建App Service服务,如何来解决这个问题呢?
    EMQ「边缘工厂云」异常事件告警处理架构
    JMeter 扩展开发:自定义 Java Sampler
    开箱即用的数据缓存服务|EMQX Cloud 影子服务应用场景解析
    在 AWS EKS 上部署 EMQX MQTT 集群
    JMeter 扩展开发:BeanShell 数据模拟实现及性能探讨
    EMQ 助力构建工业生产数字孪生基础架构
    vue学习之proxy跨域代理
  • 原文地址:https://www.cnblogs.com/zhaoxianxin/p/13267946.html
Copyright © 2020-2023  润新知