📜  给定二叉树右视图中的节点总和(1)

📅  最后修改于: 2023-12-03 15:27:34.554000             🧑  作者: Mango

给定二叉树右视图中的节点总和

问题描述

给定一个二叉树,你需要计算它右视图中所有节点的和。

在二叉树的右视图中,我们只能看到二叉树中最右侧的节点。例如,给定以下二叉树,右视图的节点值是 1 -> 3 -> 4。

   1            <---
 /   \
2     3         <---
 \     \
  5     4       <---
解题思路

本题的解题思路可以分为两步:

  1. 通过 BFS 遍历二叉树,记录每一层最右侧的节点值。

  2. 将第一步得到的结果相加即可得到二叉树右视图中所有节点的和。

具体实现过程可以参考以下步骤:

  1. 定义一个 result 数组,用于存储每一层最右侧的节点值。

  2. 定义一个 queue 队列,用于辅助 BFS 遍历二叉树。

  3. 将根节点和层数 0 入队,表示从第 0 层开始遍历二叉树。

  4. 循环遍历 queue 队列,直到队列为空:

    1)获取当前节点的值和层数。

    2)如果当前层数在 result 数组内已有记录,则更新该层的节点值为当前节点的值,否则将当前节点的值加入 result 数组。

    3)将当前节点的左右子节点和层数 +1 入队。

  5. 将 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 遍历二叉树的思路。