【力扣日记】103二叉树的锯齿形层次遍历

题目描述

给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

例如:给定二叉树 [3,9,20,null,null,15,7],
返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]

算法思路

类似二叉树的层次遍历。

class Solution:
    def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root:return []
        q = [root]
        result = []
        k=-1
        while q:
            res,d= [],[]
            k+=1
            while q:
                i=q.pop()
                res.append(i.val)
                if not k%2:
                    if i.left:d.append(i.left)
                    if i.right:d.append(i.right)
                else:
                    if i.right:d.append(i.right)
                    if i.left:d.append(i.left)
            result.append(res)
            q=d[:]
        return result

或者仅在结果位置result.append(res)修改。

class Solution:
    def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root:return []
        q = [root]
        result = []
        k=0
        while q:
            res= []
            k+=1
            for i in range(len(q)):
                i=q.pop(0)
                res.append(i.val)
                if i.left:q.append(i.left)
                if i.right:q.append(i.right)
            if not k%2:res.reverse()
            result.append(res)
        return result
发布了115 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Heart_for_Ling/article/details/104398082