力扣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)

 

posted @ 2019-09-02 15:30  weilongyitian  阅读(468)  评论(0编辑  收藏  举报