数据结构(二叉树的层序遍历)
程序员文章站
2022-10-19 13:12:59
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]思路:这道题要求将树每一层的值存一个列表,所有层的列表存一个列表中所以使用BFS(广度优先),逐层遍历(同时确定遍历的层数)是可行的同时DFS(深度优先),可以使用字典记录 层数:[数值]。也是可行的1.BFS模板遍历时不用明...
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
思路:这道题要求将树每一层的值存一个列表,所有层的列表存一个列表中
所以使用BFS(广度优先),逐层遍历(同时确定遍历的层数)是可行的
同时DFS(深度优先),可以使用字典记录 层数:[数值]。也是可行的
1.BFS模板
遍历时不用明确层数
while queue:
cur=queue.popleft()
'''取出节点'''
'''对此节点遍历'''
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
'''下一层非空结点加入队列'''
遍历时要求明确层数(每次while循环,一层个结点)
while queue:
size=len(queue)
for i in range(size):
'''遍历本层'''
cur=queue.popleft()
'''取出节点'''
'''对此节点遍历'''
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
'''下一层非空结点加入队列'''
代码
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
queue = collections.deque()
queue.append(root)
lt=[]
if not root:
return []
while queue:
size=len(queue)
l=[]
while size:
size-=1
cur=queue.popleft()
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
l.append(cur.val)
if l!=[]:
lt.append(l)
return lt
2.DFS代码
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
dt={}
def dg(root,n,dt):
if not root:
return
if not dt.get(n):
dt[n]=[root.val]
else:
dt[n].append(root.val)
dg(root.left,n+1,dt)
dg(root.right,n+1,dt)
dg(root,1,dt)
return list(dt.values())
本文地址:https://blog.csdn.net/honglouyibeng/article/details/107109822
上一篇: python数据结构(将有序数组转换为二叉搜索树)
下一篇: 一些自己整理的java基础