代码随想录算法训练营【二叉树篇层序遍历】

server/2024/9/23 14:33:27/

二叉树的层序遍历

注:本文代码来自于代码随想录

102.二叉树的层序遍历

力扣102

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 levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:if not root:return []queue = collections.deque([root])result = []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)result.append(level)return result

递归法

#递归法
# 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 levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:if not root:return []levels = []def traverse(node, level):if not node:returnif len(levels) == level:levels.append([])levels[level].append(node.val)traverse(node.left, level + 1)traverse(node.right, level + 1)traverse(root, 0)return levels

107.二叉树的层次遍历 II

力扣107

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 levelOrderBottom(self, root: Optional[TreeNode]) -> List[List[int]]:if not root:return []queue = collections.deque([root])result = []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)result.append(level)return result[::-1]

199.二叉树的右视图

力扣199

层序遍历的时候,判断是否遍历到单层的最后面的元素,如果是,就放进result数组中,随后返回result就可以了。

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 rightSideView(self, root: TreeNode) -> List[int]:if not root:return []queue = collections.deque([root])right_view = []while queue:level_size = len(queue)for i in range(level_size):node = queue.popleft()if i == level_size - 1:right_view.append(node.val)if node.left:queue.append(node.left)if node.right:queue.append(node.right)return right_view

637.二叉树的层平均值

力扣637

Python

class Solution:"""二叉树层平均值迭代解法"""# 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 averageOfLevels(self, root: TreeNode) -> List[float]:if not root:return []queue = collections.deque([root])averages = []while queue:size = len(queue)level_sum = 0for i in range(size):node = queue.popleft()level_sum += node.valif node.left:queue.append(node.left)if node.right:queue.append(node.right)averages.append(level_sum / size)return averages

429.N叉树的层序遍历

力扣429

Python

层序遍历

"""
# Definition for a Node.
class Node:def __init__(self, val=None, children=None):self.val = valself.children = children
"""class Solution:def levelOrder(self, root: 'Node') -> List[List[int]]:if not root:return []result = []queue = collections.deque([root])while queue:level_size = len(queue)level = []for _ in range(level_size):node = queue.popleft()level.append(node.val)for child in node.children:queue.append(child)result.append(level)return result

递归法

# LeetCode 429. N-ary Tree Level Order Traversal
# 递归法
class Solution:def levelOrder(self, root: 'Node') -> List[List[int]]:if not root: return []result=[]def traversal(root,depth):if len(result)==depth:result.append([])result[depth].append(root.val)if root.children:for i in range(len(root.children)):traversal(root.children[i],depth+1)traversal(root,0)return result

515.在每个树行中找最大值

力扣515

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 largestValues(self, root: TreeNode) -> List[int]:if not root:return []result = []queue = collections.deque([root])while queue:level_size = len(queue)max_val = float('-inf')for _ in range(level_size):node = queue.popleft()max_val = max(max_val, node.val)if node.left:queue.append(node.left)if node.right:queue.append(node.right)result.append(max_val)return result

116.填充每个节点的下一个右侧节点指针

力扣116

本题依然是层序遍历,只不过在单层遍历的时候记录一下本层的头部节点,然后在遍历的时候让前一个节点指向本节点就可以了

Python

"""
# Definition for a Node.
class Node:def __init__(self, val: int = 0, left: 'Node' = None, right: 'Node' = None, next: 'Node' = None):self.val = valself.left = leftself.right = rightself.next = next
"""
class Solution:def connect(self, root: 'Node') -> 'Node':if not root:return rootqueue = collections.deque([root])while queue:level_size = len(queue)prev = Nonefor i in range(level_size):node = queue.popleft()if prev:prev.next = nodeprev = nodeif node.left:queue.append(node.left)if node.right:queue.append(node.right)return root

117.填充每个节点的下一个右侧节点指针II

力扣117

这道题目说是二叉树,但116题目说是完整二叉树,其实没有任何差别,一样的代码一样的逻辑一样的味道

Python

# 层序遍历解法
"""
# Definition for a Node.
class Node:def __init__(self, val: int = 0, left: 'Node' = None, right: 'Node' = None, next: 'Node' = None):self.val = valself.left = leftself.right = rightself.next = next
"""class Solution:def connect(self, root: 'Node') -> 'Node':if not root:return rootqueue = collections.deque([root])while queue:level_size = len(queue)prev = Nonefor i in range(level_size):node = queue.popleft()if prev:prev.next = nodeprev = nodeif node.left:queue.append(node.left)if node.right:queue.append(node.right)return root

104.二叉树的最大深度

力扣104

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 maxDepth(self, root: TreeNode) -> int:if not root:return 0depth = 0queue = collections.deque([root])while queue:depth += 1for _ in range(len(queue)):node = queue.popleft()if node.left:queue.append(node.left)if node.right:queue.append(node.right)return depth

111.二叉树的最小深度

力扣111

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 minDepth(self, root: TreeNode) -> int:if not root:return 0depth = 0queue = collections.deque([root])while queue:depth += 1 for _ in range(len(queue)):node = queue.popleft()if not node.left and not node.right:return depthif node.left:queue.append(node.left)if node.right:queue.append(node.right)return depth

http://www.ppmy.cn/server/114204.html

相关文章

java后端保存的本地图片通过ip+端口直接访问

直接上代码吧 package com.ydx.emms.datapro.controller;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.…

【CSS】如何写渐变色文字并且有打光效果

效果如上,其实核心除了渐变色文字的设置 background: linear-gradient(270deg, #d2a742 94%, #f6e2a7 25%, #d5ab4a 48%, #f6e2a7 82%, #d1a641 4%);color: #e8bb2c;background-clip: text;color: transparent;还有就是打光效果,原理其实就是两块遮罩&am…

torchvision数据集使用

文章目录 一、下载torchvision中的数据集文件二、断点知识点三、数据集形式建立四、展示数据集中的图片 一、下载torchvision中的数据集文件 这段代码是使用PyTorch的torchvision库来加载CIFAR-10数据集。 import torchvision train_set torchvision.datasets.CIFAR10(root&…

【脊线图】:附Origin详细画图流程

目录 No.1 理解脊线图 No.2 画图流程 1 导入数据,绘制图形 2 设置绘图细节 3 设置颜色标尺并进行色阶控制 4 设置坐标轴 5 效果图 No.1 理解脊线图 脊线图,在统计学和数据分析领域,是一种高级且专业的可视化工具,用于展示…

Kubernetes v1.28.0安装详解

Kubernetes v1.28.0安装详解 一.环境初始化 要在所有节点执行命令进行配置 1、检查操作系统的版本 此部署环境为CentOS 7.9 [rootCentOS7 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootCentOS7 ~]#2、主机名解析 为了方便集群节点间的互相调…

k8s Prometheus

一、部署 Prometheus kubectl create ns kube-ops# 创建 prometheus-cm.yaml apiVersion: v1 kind: ConfigMap metadata:name: prometheus-confignamespace: kube-ops data:prometheus.yml: |global:scrape_interval: 15s # 表示 prometheus 抓取指标数据的频率,默…

CSS 尺寸 (Dimension)

CSS 尺寸 (Dimension) CSS 尺寸属性用于控制元素的高度和宽度。这些属性对于创建响应式设计和调整页面布局至关重要。本文将详细介绍 CSS 中的尺寸属性,包括它们的工作原理、如何使用它们,以及一些最佳实践。 目录 高度和宽度 高度 (height)宽度 (width)最大和最小尺寸 最大…

亲测好用,ChatGPT 3.5/4.0新手使用手册~ 【2024年9月 更新】

都知道ChatGPT很强大,聊聊天、写论文、搞翻译、写代码、写文案、审合同等等,无所不能~ 那么到底怎么使用呢?其实很简单了,国内AI产品发展也很快,很多都很好用了~ 我一直在用,建议收藏下来~ 有最先进、最…