此博客为《代码随想录》二叉树章节的学习笔记,主要内容为二叉树的广度优先遍历相关的题目解析。
文章目录
- 102. 二叉树的层序遍历
- 107. 二叉树的层序遍历 II
- 199. 二叉树的右视图
- 637. 二叉树的层平均值
- 429. N 叉树的层序遍历
- 515. 在每个树行中找最大值
- 116. 填充每个节点的下一个右侧节点指针
- 117. 填充每个节点的下一个右侧节点指针 II
- 104.二叉树的最大深度
- 111. 二叉树的最小深度
题目链接
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if root is None:
return []
res = []
q = [root]
while q:
vals = []
for _ in range(len(q)):
node = q.pop(0)
vals.append(node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
res.append(vals)
return res
len(q)
,即当前要处理的层的节点个数题目链接
class Solution:
def levelOrderBottom(self, root: Optional[TreeNode]) -> List[List[int]]:
if root is None:
return []
res = []
q = [root]
while q:
vals = []
for _ in range(len(q)):
node = q.pop(0)
vals.append(node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
res.append(vals)
res.reverse()
return res
题目链接
class Solution:
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
if root is None:
return []
res = []
q = [root]
while q:
size = len(q)
for i in range(size):
node = q.pop(0)
if i == size - 1:
res.append(node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
return res
len(q)
题目链接
class Solution:
def averageOfLevels(self, root: Optional[TreeNode]) -> List[float]:
if root is None:
return []
res = []
q = [root]
while q:
size = len(q)
s = 0
for i in range(size):
node = q.pop(0)
s += node.val
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
res.append(s / size)
return res
size
题目链接
class Solution:
def levelOrder(self, root: 'Node') -> List[List[int]]:
if root is None:
return []
res = []
q = [root]
while q:
vals = []
for i in range(len(q)):
node = q.pop(0)
vals.append(node.val)
for child in node.children:
q.append(child)
res.append(vals)
return res
children
字段题目链接
class Solution:
def largestValues(self, root: Optional[TreeNode]) -> List[int]:
if root is None:
return []
res = []
q = [root]
while q:
m = float('-inf')
for i in range(len(q)):
node = q.pop(0)
m = max(m, node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
res.append(m)
return res
float('-inf')
表示负无穷题目链接
class Solution:
def connect(self, root: 'Optional[Node]') -> 'Optional[Node]':
if root is None:
return root
q = [root]
while q:
for i in range(len(q)):
node = q.pop(0)
if i > 0:
pre.next = node
pre = node
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
return root
pre
指针记录前一个节点,当 i > 0 时,完成 pre.next = node
的赋值题目链接
class Solution:
def connect(self, root: 'Node') -> 'Node':
if root is None:
return root
q = [root]
while q:
for i in range(len(q)):
node = q.pop(0)
if i > 0:
pre.next = node
pre = node
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
return root
题目链接
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
if root is None:
return 0
q = [root]
cnt = 0
while q:
cnt += 1
for i in range(len(q)):
node = q.pop(0)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
return cnt
题目链接
class Solution:
def minDepth(self, root: Optional[TreeNode]) -> int:
if root is None:
return 0
q = [root]
cnt = 0
while q:
cnt += 1
for i in range(len(q)):
node = q.pop(0)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
if not node.left and not node.right:
return cnt
return cnt