LeetCode-103. 二叉树的锯齿形层序遍历【树 广度优先搜索 二叉树】

LeetCode-103. 二叉树的锯齿形层序遍历【树 广度优先搜索 二叉树】

  • 题目描述:
  • [解题思路一:层序遍历,唯一区别就是`ans.append(level[::-1] if len(ans) % 2 else level)`](#解题思路一:层序遍历,唯一区别就是ans.append(level[::-1] if len(ans) % 2 else level))
  • 背诵版:
  • 解题思路三:0

题目描述:

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

示例 1:

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

输出:[[3],[20,9],[15,7]]

示例 2:

输入:root = [1]

输出:[[1]]

示例 3:

输入:root = []

输出:[]

提示:

树中节点数目在范围 [0, 2000] 内

-100 <= Node.val <= 100

解题思路一:层序遍历,唯一区别就是ans.append(level[::-1] if len(ans) % 2 else level)

python 复制代码
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        if not root:
            return []
        queue = deque([root])
        ans = []
        while queue:
            level = []
            for _ in range(len(queue)):
                cur = queue.popleft()
                level.append(cur.val)
                if cur.left:
                    queue.append(cur.left)
                if cur.right:
                    queue.append(cur.right)
            ans.append(level[::-1] if len(ans) % 2 else level)
        return ans

时间复杂度:O(n)

空间复杂度:O(n)

背诵版:

python 复制代码
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        if not root:
            return []
        q = deque([root])
        ans = []
        while q:
            level = []
            for i in range(len(q)):
                cur = q.popleft()
                level.append(cur.val)
                if cur.left:
                    q.append(cur.left)
                if cur.right:
                    q.append(cur.right)
            # if len(ans) % 2 == 0:
            #     ans.append(level[:])
            # else:
            #     ans.append(level[::-1])
            ans.append(level[::-1] if len(ans) % 2 else level[:])
        return ans

时间复杂度:O(n)

空间复杂度:O(n)

解题思路三:0

python 复制代码

时间复杂度:O(n)

空间复杂度:O(n)


创作不易,观众老爷们请留步... 动起可爱的小手,点个赞再走呗 (๑◕ܫ←๑) 欢迎大家关注笔者,你的关注是我持续更博的最大动力

原创文章,转载告知,盗版必究




♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

相关推荐
Coisinilove8 分钟前
MATLAB——循环语句
开发语言·算法·matlab
bigbigli_大李25 分钟前
C++基础21 二维数组及相关问题详解
数据结构·c++·算法
PPPPPaPeR.2 小时前
TopK问题与堆排序
c语言·开发语言·c++·算法
卡戎-caryon3 小时前
【数据结构】06.栈&&队列
c语言·数据结构·算法·链表
山脚ice3 小时前
【CT】LeetCode手撕—704. 二分查找
算法·leetcode
贱贱的剑3 小时前
【算法】选择排序
算法·rust·排序算法
瑜陀3 小时前
2024.06.30 刷题日记
数据结构·算法·leetcode
Star Patrick3 小时前
*算法训练(leetcode)第二十天 | 39. 组合总和、40. 组合总和 II、131. 分割回文串
c++·算法·leetcode
光久li3 小时前
【算法刷题 | 动态规划14】6.28(最大子数组和、判断子序列、不同的子序列)
算法·动态规划
飘然渡沧海3 小时前
gbk,ucs-2转中文
java·开发语言·算法