给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]
提示:
0 <= 二叉树的结点数 <= 1500
class Solution: def levelOrder(self , root: TreeNode) -> List[List[int]]: # write code here res = [] level = [] if root is None: return res queue = [root] size = len(queue) while queue: cur_node = queue.pop(0) level.append(cur_node.val) size = size - 1 if cur_node.left is not None: queue.append(cur_node.left) if cur_node.right is not None: queue.append(cur_node.right) if size == 0: res.append(level) level = [] size = len(queue) return res
class Solution: def levelOrder(self , root: TreeNode) -> List[List[int]]: # write code here queue = [root] res= [] while queue: tmp = [] for i in range(len(queue)): node = queue.pop(0) tmp.append(node.val) if node.left:queue += [node.left] if node.right:queue += [node.right] res.append(tmp) return res
class Solution: def levelOrder(self , root: TreeNode) -> List[List[int]]: if not root: return [] Que = [root] L = [] while Que: row = [] for i in range(len(Que)): node = Que.pop(0) row.append(node.val) if node.left: Que.append(node.left) if node.right: Que.append(node.right) L.append(row) return L
from queue import Queue class Solution: def levelOrder(self , root: TreeNode) -> List[List[int]]: lst_level = [] if not root: return lst_level # 创建一个FIFO队列 q = Queue() # 根节点入队 q.put(root) # 遍历所有结点,即队列非空 while not q.empty(): # row保存当前层的结点 row = [] # 当前层对应的节点数 n = q.qsize() # 循环出队当前层结点并将孩子结点入队 for i in range(n): # 出队结点 node = q.get() # 出队结点值添加至row队列 row.append(node.val) if node.left: q.put(node.left) if node.right: q.put(node.right) # 当前层结点遍历完毕 lst_level.append(row) return lst_level
import sys sys.setrecursionlimit(10000000) class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param root TreeNode类 # @return int整型二维数组 # class Solution: def __init__(self): self.res = [] def levelOrder(self , root: TreeNode) -> List[List[int]]: # write code here res = [] if not root: return [] def dfs(index, root): if len(res) < index: res.append([]) res[index-1].append(root.val) if root.left: dfs(index + 1, root.left) if root.right: dfs(index + 1, root.right) dfs(1, root) return res class Solution: def levelOrder(self , root: TreeNode) -> List[List[int]]: results = [] if not root: return results from collections import deque que = deque([root]) while que: res = [] size = len(que) for _ in range( size ): cur = que.popleft() res.append(cur.val) if cur.left: que.append(cur.left) if cur.right: que.append(cur.right) results.append(res) return results
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param root TreeNode类 # @return int整型二维数组 # class Solution: def levelOrder(self , root: TreeNode) -> List[List[int]]: temp = [] result = [] temp.append(root) while len(temp) > 0: size = len(temp) inner = [] while size > 0: tn = temp.pop(0) inner.append(tn.val) if tn.left: temp.append(tn.left) if tn.right: temp.append(tn.right) size = size - 1 result.append(inner) return result
class Solution: def levelOrder(self , root: TreeNode) -> List[List[int]]: # write code here queue = [(root, 0)] res = [] while queue: r, n = queue.pop(0) if r == None: continue if len(res) - 1 != n: res.append([r.val]) else: res[n].append(r.val) queue.append((r.left, n + 1)) queue.append((r.right, n + 1)) return res
class Solution: def levelOrder(self , root: TreeNode) -> List[List[int]]: if not root:return [] queue=[root] ans=[] while queue: ans.append([node.val for node in queue]) temp=[] for node in queue: if node.left: temp.append(node.left) if node.right: temp.append(node.right) queue=temp return ans
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param root TreeNode类 # @return int整型二维数组 # class Solution: def levelOrder(self , root: TreeNode) -> List[List[int]]: # write code here if root is None: return [] levelOrderSeq = [] levelOrderSeq.append(root) out = [] # 利用队列 while levelOrderSeq: new_node = [] old_node = [] while levelOrderSeq: node = levelOrderSeq[0] old_node.append(node.val) del levelOrderSeq[0] if node.left: new_node.append(node.left) if node.right: new_node.append(node.right) out.append(old_node) levelOrderSeq += new_node return out
队列
时间复杂度:O(n) 空间复杂度:O(n)
class Solution: def levelOrder(self , root: TreeNode) -> List[List[int]]: res = [] queue = [root] while queue: temp = [] for i in range(len(queue)): cur = queue.pop(0) temp.append(cur.val) if cur.left: queue.append(cur.left) if cur.right: queue.append(cur.right) res.append(temp) return res
class Solution: def levelOrder(self , root: TreeNode) -> List[List[int]]: import sys sys.setrecursionlimit(100000) # write code here def dfs(node, level, arr): if node is None: return if level not in arr: arr[level] = [] arr[level].append(node.val) dfs(node.left, level + 1, arr) dfs(node.right, level + 1, arr) # 使用字典存储层级节点 arr = dict() dfs(root, 0, arr) return [arr[i] for i in arr]
from collections import deque class Solution: def levelOrder(self , root: TreeNode) -> List[List[int]]: if not root: return [] q=deque() ans=[] q.append(root) while len(q)>0: ls=[] for i in range(len(q),0,-1): t=q.popleft() ls.appe***al) if t.left: q.append(t.left) if t.right: q.append(t.right) ans.append(ls) return ans
简单的BFS,随后再优化吧
class Solution: def levelOrder(self , root: TreeNode) -> List[List[int]]: # write code here ans=[[root.val]] deque=[[root]] for i_deque in deque: child=[] child_val=[] for root in i_deque: left,right = root.left,root.right if left: child.append(left) child_val.append(left.val) if right: child.append(right) child_val.append(right.val) if child: deque.append(child) ans.append(child_val) return ans
class Solution: def levelOrder(self , root: TreeNode) -> List[List[int]]: # write code here if not root: return [] stack = [root] ans = [] while stack: temp = [] layer = [] for root in stack: layer.append(root.val) if root.left: temp.append(root.left) if root.right: temp.append(root.right) ans.append(layer) stack = temp return ans