您当前的位置: 首页 >  Python

Better Bench

暂无认证

  • 4浏览

    0关注

    695博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Leetcode刷题Python】103. 二叉树的锯齿形层序遍历

Better Bench 发布时间:2022-08-06 21:17:51 ,浏览量:4

1 题目

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

示例 1:

输入:root = [3,9,20,null,null,15,7] 输出:[[3],[20,9],[15,7]]

示例 2:

输入:root = [1] 输出:[[1]]

示例 3:

输入:root = [] 输出:[]

2 解析

为了满足题目要求的返回值为「先从左往右,再从右往左」交替输出的锯齿形,我们可以利用「双端队列」的数据结构来维护当前层节点值输出的顺序。

双端队列是一个可以在队列任意一端插入元素的队列。在广度优先搜索遍历当前层节点拓展下一层节点的时候我们仍然从左往右按顺序拓展,但是对当前层节点的存储我们维护一个变量 flag记录是从左至右还是从右至左的:

  • 如果从左至右,我们每次将被遍历到的元素插入至双端队列的末尾。

  • 如果从右至左,我们每次将被遍历到的元素插入至双端队列的头部。

当遍历结束的时候我们就得到了答案数组。

3 Python实现
def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
    
    res = []
    q =deque([root])
    flag = True
    while q and q[0]:
        n = len(q)
        tmp = []
        for _ in range(n):
            node = q.popleft()
            tmp.append(node.val)
            if node.left:
                q.append(node.left)
            if node.right:
                q.append(node.right)
        if  flag:
                res.append(tmp)
        else:
            tmp.reverse()
            res.append(tmp)
        flag = not flag
    return res
关注
打赏
1665674626
查看更多评论
立即登录/注册

微信扫码登录

0.2391s