从上到下打印二叉树 II
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
代码:
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
res = []
if not root: return res
queue_1, queue_2 = [], []
queue_2.append(root)
while True:
tmp_list = []
while(queue_2):
tmp = queue_2.pop(0)
tmp_list.append(tmp.val)
if tmp.left: queue_1.append(tmp.left)
if tmp.right: queue_1.append(tmp.right)
res.append(tmp_list)
if len(queue_1) == 0: break
queue_2 = queue_1
queue_1 = []
return res
利用队列实现层序遍历即可,此题要求同一层一起打印,用一个额外列表辅助存储即可。时间复杂度O(n),空间复杂度O(n)。
从上到下打印二叉树 III
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[20,9],
[15,7]
]
代码:
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
res = []
if not root: return res
queue1, queue2 = [], []
queue2.append(root)
while True:
tmp_list = []
while queue2:
tmp = queue2.pop(0)
tmp_list.append(tmp.val)
if tmp.left: queue1.append(tmp.left)
if tmp.right: queue1.append(tmp.right)
res.append(tmp_list) if len(res)%2 == 0 else res.append(tmp_list[::-1])
if not queue1: break
queue2 = queue1
queue1 = []
return res
此题和上题的区别在于要求之型打印,这里利用了Python列表的切片翻转方法,[::-1],假设根节点所在层为第0层,从上到下偶数层不翻转,奇数层翻转。
时间复杂度O(n),空间复杂度O(n)。
这篇博客探讨了如何使用Python实现从上到下和之字形打印二叉树的层次遍历。对于从上到下的层次遍历,通过维护两个队列交替进行节点的添加和打印。而之字形遍历则通过判断当前层的奇偶性来决定是否翻转节点顺序。两种方法的时间复杂度均为O(n),空间复杂度为O(n)。
943

被折叠的 条评论
为什么被折叠?



