先插入几句题外话
[:]和[::]的区别是?
首先是
b = a[i:j] 表示复制a[i]到a[j-1],以生成新的list对象,其中i\j缺省时分别默认为0\len(b)
d=a[:-1] #从位置0到位置-1之前的数
print(d) #pytho
e=a[:-2] #从位置0到位置-2之前的数
print(e) #pyth
其次是
b = a[i:j:s] 表示i,j与下面的一样,s表示步进值,缺省为1.
a='python'
b=a[::-1]
print(b) #nohtyp
c=a[::-2]
print(c) #nhy
(或者直接reverse)
进入正题:-----------------------------------------------------------
给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回锯齿形层序遍历如下:
[
[3],
[20,9],
[15,7]
]
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
if not root: return []
res = []
cur_level = [root]
depth = 0
while cur_level:
tmp = []
next_level = []
for node in cur_level:
tmp.append(node.val)
if node.left:
next_level.append(node.left)
if node.right:
next_level.append(node.right)
if depth % 2 == 1:
res.append(tmp[::-1])
else:
res.append(tmp)
depth += 1
cur_level = next_level
return res
再贴一个别的大佬的DFS:
class Solution:
def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
def DFS(pNode, depth):
if pNode is None: return
if len(res) <= depth: res.append([])
if depth % 2 == 1: res[depth].insert(0, pNode.val)
else: res[depth].append(pNode.val)
DFS(pNode.left, depth + 1)
DFS(pNode.right, depth + 1)
res = []
DFS(root, 0)
return res
作者:victor3290
链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/solution/bfsdfs-by-victor3290-9kns/