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