【算法训练】剑指offer#32 - III 从上到下打印二叉树 III
一、描述
剑指 Offer 32 - III. 从上到下打印二叉树 III
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
示例 :
3
/ \
9 20
/ \
15 7
返回:
[
[3],
[20,9],
[15,7]
]
二、思路
- 直接在剑指 Offer 32 - II. 从上到下打印二叉树 II基础上加个判断就行了吧
class Solution:
def levelOrder(self, root: TreeNode) -> List[int]:
now_left = False
if not root:
return []
res, queue = [], []
queue.append(root)
while queue:
temp = []
for _ in range(len(queue)):
node = queue.pop(0)
if now_left:
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
else:
if node.right:
queue.append(node.right)
if node.left:
queue.append(node.left)
temp.append(node.val)
res.append(temp)
now_left = not now_left
return res
不行哦,这样只是调转了同节点的左右,这道题是整层调转
- 那就这样,给temp加层判断就行了,反转插入res
三、解题
class Solution:
def levelOrder(self, root: TreeNode) -> List[int]:
isRevers = False
if not root:
return []
res, queue = [], []
queue.append(root)
while queue:
temp = []
for _ in range(len(queue)):
node = queue.pop(0)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
temp.append(node.val)
if isRevers:
temp = temp[::-1]
isRevers = not isRevers
res.append(temp)
return res