637. 二叉树的层平均值
**题目链接: **二叉树的层平均值
这题本质上还是层序遍历,最后需要将二维数组展开成一维。二维数组变成一维
class Solution:
def averageOfLevels(self, root: Optional[TreeNode]) -> List[float]:
result = []
if not root:
return []
from collections import deque
que = deque([root])
while que:
res = []
size = len(que)
Sum = 0
for _ in range(size):
cur = que.popleft()
Sum += cur.val
if cur.left:
que.append(cur.left)
if cur.right:
que.append(cur.right)
Average = Sum / size
res.append(Average)
result.append(res)
return sum(result,[])
不要展开的方式
class Solution:
"""二叉树层平均值迭代解法"""
def averageOfLevels(self, root: TreeNode) -> List[float]:
results = []
if not root:
return results
from collections import deque
que = deque([root])
while que:
size = len(que)
sum_ = 0
for _ in range(size):
cur = que.popleft()
sum_ += cur.val
if cur.left:
que.append(cur.left)
if cur.right:
que.append(cur.right)
results.append(sum_ / size)
return results
429. N 叉树的层序遍历
注意extend与append的使用
extend 与append
class Solution:
def levelOrder(self, root: 'Node') -> List[List[int]]:
result=[]
if not root:
return []
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.children:
que.extend(cur.children)
result.append(res)
return result
#116. 填充每个节点的下一个右侧节点指针
填充每个节点的下一个右侧节点指针
本题已经默认next 指向None,只不过在单层遍历的时候记录一下本层的头部节点,然后在遍历的时候让前一个节点指向本节点就可以了
class Solution:
def connect(self, root: 'Optional[Node]') -> 'Optional[Node]':
if not root:
return None
queue = [root]
while queue:
n = len(queue)
for i in range(n):
node = queue.pop(0)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
# 循环退出
if i == n - 1:
break
node.next = queue[0]
return root