「这是我参与2022首次更文挑战的第37天,活动详情查看:2022首次更文挑战」
[剑指 Offer 32 - II. 从上到下打印二叉树 II]
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
返回其层次遍历结果:
[ [3], [9,20], [15,7] ]
提示:
节点总数 <= 1000
解题思路:
- 这个题和昨天的做的很像,都是套用的二叉树的 广度优先遍历 的方法
- 碰到这样的题先判断是否存在root 不存在直接返回
- 使用辅助参数 arr =[root] 遍历递归获取每一层的参数
- 将每一层参数都写入结果集中,最后得到res就是我们想要的结果
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:
return []
arr = [root]
res = []
while arr:
n = len(arr)
tmp = []
for row in range(n):
if not arr:
break
ans = arr.pop(0)
tmp.append(ans.val)
if node.left:
arr.append(ans.left)
if node.right:
arr.append(ans.right)
res.append(tmp)
return res
执行结果:
[剑指 Offer 32 - III. 从上到下打印二叉树 III]
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
例如: 给定二叉树: [3,9,20,null,null,15,7],
返回其层次遍历结果:
[ [3], [20,9], [15,7] ]
提示:
节点总数 <= 1000
解题思路:
- 这个题和上面的题机会一模一样,唯一不同的地方需要根据奇偶将列表进行翻转
- 这里用了一个辅助参数m 每次循环进行+1操作,然后通过m%2取余的方法进行判断是奇偶。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:
return []
arr = [root]
res = []
m=1
while arr:
n = len(arr)
tmp = []
for _ in range(n):
if not arr:
break
ans = arr.pop(0)
tmp.append(ans.val)
if ans.left:
arr.append(ans.left)
if node.right:
arr.append(ans.right)
if m%2 == 0:
res.append(tmp[::-1])
else:
res.append(tmp)
m+=1
return res