• 力扣102题 按层打印树


    给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

    '''
    层序遍历,输出每一层的值,层与层之间是独立输出
    1、BFS、广度优先搜索
    2、DFS、深度优先搜索
    '''
    import collections
    class TreeNode:
        def __init__(self,x):
            self.val = x
            self.left = None
            self.right = None
    class Solution:
        def BFSlevelOrder(self,root):
            result = []
            if not root:                                    #如果根节点为空,则直接返回空
                return result
            queue = collections.deque()                     #构建一个双端队列
            queue.append(root)                              #首先将根节点添加进来
            #visited = set()                                #如果是图的话,需要记录其访问过的节点
            while queue:
                current_level = []                          #当前层的节点
                for i in range(len(queue)):
                    node = queue.popleft()                  #弹出队首元素
                    current_level.append(node.val)          #记录当前的元素值
                    if node.left: queue.append(node.left)   #如果有左节点,就添加进来
                    if node.right: queue.append(node.right) #如果有右节点,就添加进来
                result.append(current_level)                #将该层的结果进行缓存
            return result
        '''
        DFS:深度优先的策略搜索
        '''
        def DFSlevelOrder(self,root):
            def dfs(node,level):                            #子函数,dfs
                if not node:return                          #终止条件,如果节点为空,则返回
                if len(result) < level+1:                   #如果里面的个数小于其层数,就新创建个列表
                    result.append([])
                result[level].append(node.val)              #将当前层的节点值添加进来
                dfs(node.left,level+1)                      #调用下一层,左节点,当返回时候会继续添加其节点值
                dfs(node.right,level+1)                     #调用下一层,右节点值,当返回时候会继续添加其节点值
            if not root:return []                           #DFS起始点,如果根节点为空,直接返回空
            result = []                                     #存放每层的结果值
            dfs(root,0)                                     #调用第0层开始
            return result
    if __name__ == '__main__':
        solution = Solution()
        root = TreeNode(3)                                  #构建一棵树
        l = TreeNode(9)
        r = TreeNode(20)
        root.left = l
        root.right = r
        rl = TreeNode(15)
        rr = TreeNode(20)
        r.left = rl
        r.right = rr
        resultBFS = solution.BFSlevelOrder(root)
        print('BFS Solution:',resultBFS)
        resultDFS = solution.DFSlevelOrder(root)
        print('DFS Solution:',resultDFS)
  • 相关阅读:
    架构、框架、组件、插件浅谈理解
    JAVA : 关于高内聚与低耦合
    windows 使用VMWARE 安装mac os
    JAVA 多线程(6):等待、通知 (1)
    JAVA 多线程(5)
    Django 笔记(六)mysql增删改查
    CSS选择器
    ubuntu 安装配置 mysql
    Django 笔记(五)自定义标签 ~ 映射mysql
    Django 笔记(四)模板标签 ~ 自定义过滤器
  • 原文地址:https://www.cnblogs.com/missidiot/p/11446886.html
Copyright © 2020-2023  润新知