当前位置:首页 > 编程笔记 > 正文
已解决

算法刷题-二叉树

来自网友在路上 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%的人还看了

猜你感兴趣

版权申明

本文"算法刷题-二叉树":http://eshow365.cn/6-29095-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!