📌  相关文章
📜  除BST中给定节点的相邻节点外的总和(1)

📅  最后修改于: 2023-12-03 14:58:40.720000             🧑  作者: Mango

题目介绍

本题要求完成一个函数,输入为一颗二叉搜索树以及其中的一个节点,输出为除该节点相邻节点外的节点值之和。需要特别注意的是,所给二叉搜索树是一个有效的二叉树,已经被构建好且不存在重复节点。

示例

输入:

4

/
2 6 / \ /
1 3 5 7

节点值为2

输出:

12

解释:除2节点的相邻节点1,3外,所有节点之和为12。

思路

由题目可知,所给的二叉搜索树已经被构建好,因此可以采用递归的方法求解。

  • 如果根节点为空,返回0
  • 如果根节点为目标节点,那么将其左右子树节点的和返回即可
  • 如果目标节点在根节点左边,那么就只需递归根节点的右子树,并加上根节点值即可。
  • 如果目标节点在根节点右边,那么就只需递归根节点的左子树,并加上根节点值即可。

代码实现

下面是Python的实现代码:

def sum_exclude_neighbours(root, node):
    if not root:
        return 0
    if root == node:
        return (root.left.val if root.left else 0) + (root.right.val if root.right else 0)
    if root.val > node.val:
        return root.val + sum_exclude_neighbours(root.left, node)
    else:
        return root.val + sum_exclude_neighbours(root.right, node)

复杂度分析

本算法采用递归方式实现,时间复杂度为O(n),空间复杂度为O(h),其中h为二叉树的深度。