层序遍历二叉树(之字形遍历)
Last updated
Last updated
问题简述
按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[20,9],
[15,7]
]
提示:
节点总数 <= 1000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
在“层序遍历二叉树-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]]:
from collections import deque
if not root: return []
buf = deque([root])
lv = 1 # 记录当前层数
cnt = 1 # 记录当前层的节点数
ret = []
while buf:
tmp = []
for _ in range(cnt):
cur = buf.popleft()
tmp.append(cur.val)
cnt -= 1
if cur.left:
buf.append(cur.left)
cnt += 1
if cur.right:
buf.append(cur.right)
cnt += 1
# 上面的代码跟 层序遍历二叉树-2 完全相同,
# 在将 tmp 加入 ret 时,对偶数层的 tmp 做一下倒序
if lv & 1: # 奇数层
ret.append(tmp)
else:
ret.append(tmp[::-1])
lv += 1
return ret