已解决
算法刷题-二叉树
来自网友在路上 169869提问 提问时间:2023-10-31 23:46:40阅读次数: 69
最佳答案 问答题库698位专家为你答疑解惑
算法刷题-二叉树
199. 二叉树的右视图
给定一个二叉树的 根节点 root
,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
思路
广度优先搜索,答案就是二叉树的最右侧的节点
遍历每层的时候,就把len(queue)-1
的节点加入到结果即可。
代码
# 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: Optional[TreeNode]) -> List[int]:res=[]if not root:return resqueue=collections.deque([root])while queue:sz=len(queue)for i in range(sz):node =queue.popleft()if i == sz-1:res.append(node.val)if node.left:queue.append(node.left)if node.right:queue.append(node.right)return res
637. 二叉树的层平均值
给定一个非空二叉树的根节点 root
, 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5
以内的答案可以被接受。
思路
和上一题一样,本次到len(queue)-1
的最后一个节点的时候,把计算的结果加入到结果中
代码
# 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: Optional[TreeNode]) -> List[float]:res = []if not root:return resq = collections.deque([root])while q:sz = len(q)sum = 0for i in range(sz):t = q.popleft()sum += t.valif t.left:q.append(t.left)if t.right:q.append(t.right)if i == sz - 1:res.append(sum / sz)return res
429. N 叉树的层序遍历
给定一个 N 叉树,返回其节点值的_层序遍历_。(即从左到右,逐层遍历)。
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
思路
广度优先搜索:每次不再区分左子树和右子树,直接遍历所有的children,加入队列
代码
class Solution:def levelOrder(self, root: 'Node') -> List[List[int]]:res = []if not root:return resq = collections.deque([root])while q:sz = len(q)cur = []for i in range(sz):t = q.popleft()cur.append(t.val)for child in t.children:q.append(child)res.append(cur)return res
515. 在每个树行中找最大值
给定一棵二叉树的根节点 root
,请找出该二叉树中每一层的最大值。
思路
广度优先搜索,每层开一个比 − 2 31 -2^{31} −231还 小的数,然后不断更新这个为最大值
代码
class Solution:def largestValues(self, root: Optional[TreeNode]) -> List[int]:res = []if not root:return resq = collections.deque([root])while q:sz = len(q)mx = -10000000000for _ in range(sz):t = q.popleft()mx = max(mx, t.val)if t.left:q.append(t.left)if t.right:q.append(t.right)if _ == sz - 1:res.append(mx)return res
查看全文
99%的人还看了
相似问题
- 〖大前端 - 基础入门三大核心之JS篇㊲〗- DOM改变元素节点的css样式、HTML属性
- Java 算法篇-链表的经典算法:判断回文链表、判断环链表与寻找环入口节点(“龟兔赛跑“算法实现)
- 代码随想录二刷 | 链表 | 删除链表的倒数第N个节点
- 节点导纳矩阵
- bhosts 显示节点 “unreach“ 状态
- 电子电器架构 —— 车载网关边缘节点总线转换
- 〖大前端 - 基础入门三大核心之JS篇㊳〗- DOM访问元素节点
- 第四天||24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II
- CS224W5.1——消息传递和节点分类
- Vue报错解决Error in v-on handler: “Error: 无效的节点选择器:#div1“
猜你感兴趣
版权申明
本文"算法刷题-二叉树":http://eshow365.cn/6-29095-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 预安装win11的电脑怎么退回正版win10?
- 下一篇: C语言鞍点数组改进版