📅  最后修改于: 2023-12-03 15:27:34.554000             🧑  作者: Mango
给定一个二叉树,你需要计算它右视图中所有节点的和。
在二叉树的右视图中,我们只能看到二叉树中最右侧的节点。例如,给定以下二叉树,右视图的节点值是 1 -> 3 -> 4。
1 <---
/ \
2 3 <---
\ \
5 4 <---
本题的解题思路可以分为两步:
通过 BFS 遍历二叉树,记录每一层最右侧的节点值。
将第一步得到的结果相加即可得到二叉树右视图中所有节点的和。
具体实现过程可以参考以下步骤:
定义一个 result 数组,用于存储每一层最右侧的节点值。
定义一个 queue 队列,用于辅助 BFS 遍历二叉树。
将根节点和层数 0 入队,表示从第 0 层开始遍历二叉树。
循环遍历 queue 队列,直到队列为空:
1)获取当前节点的值和层数。
2)如果当前层数在 result 数组内已有记录,则更新该层的节点值为当前节点的值,否则将当前节点的值加入 result 数组。
3)将当前节点的左右子节点和层数 +1 入队。
将 result 数组所有节点的值相加,即可得到二叉树右视图中节点的总和。
实现以上思路的 Python 代码如下:
def rightSideViewSum(root: TreeNode) -> int:
if not root:
return 0
result = []
queue = [(root, 0)]
while queue:
node, level = queue.pop(0)
if level < len(result):
result[level] = node.val
else:
result.append(node.val)
if node.left:
queue.append((node.left, level+1))
if node.right:
queue.append((node.right, level+1))
return sum(result)
其中,TreeNode 表示二叉树节点的结构体,包含 val、left、right 三个属性。以上代码使用 BFS 遍历二叉树,通过 result 数组存储二叉树右侧每一层最右侧的节点值,最后返回 result 数组所有节点的值之和即可得到二叉树右视图中所有节点的和。
本题通过 BFS 遍历二叉树,采用 result 数组记录二叉树右侧每一层最右侧的节点值,最后将 result 数组所有节点的值相加即可得到二叉树右视图中所有节点的和。本题是二叉树遍历中的基础题目,可以帮助我们巩固 BFS 遍历二叉树的思路。