给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [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 = Noneclass Solution:def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:if not root:return []LorR=True #先左result=[]level=[root]while len(level)>0:if LorR:#左num=[]temp=[]for tree in level:num.append(tree.val)if tree.left:temp.insert(0,tree.left)if tree.right:temp.insert(0,tree.right)level=tempresult.append(num)LorR=Falseelse:#右num=[]temp=[]for tree in level:num.append(tree.val)if tree.right:temp.insert(0,tree.right)if tree.left:temp.insert(0,tree.left)level=tempresult.append(num)LorR=Truereturn result
照着大佬的改,不知道为没他那么快……总之,按从左到右的顺序存数字,再一逆序就好了……渣渣晴哭晕……
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = Noneclass Solution:def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:if not root:return []LorR=False #先左result=[]level=[root]while len(level)>0:num=[]temp=[]for tree in level:num.append(tree.val) if tree.left:temp.append(tree.left)if tree.right:temp.append(tree.right) if LorR:#右result.append(num[::-1])else:#左result.append(num)level=temp LorR= not LorRreturn result