📜  将BST转换为更大的总和树(1)

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

将BST转换为更大的总和树

二叉搜索树(BST)是一个树,其中节点的左子树中的值均小于节点的值,而右子树中的值均大于节点的值。将BST转换为更大的总和树的过程是将每个节点的值修改为大于或等于该节点值的所有节点的和。

思路

我们可以采用反向中序遍历的方式,遍历BST所有节点,对于每个节点,将它的值存入sum变量中,并且更新节点的值为sum。这时候,每个节点的值就是它原本的值加上所有比它大的节点的值之和。

代码片段
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def convertBST(self, root: TreeNode) -> TreeNode:
        self.sum = 0
        self.helper(root)
        return root

    def helper(self, node: TreeNode) -> None:
        if node is None:
            return 
        self.helper(node.right)
        self.sum += node.val
        node.val = self.sum
        self.helper(node.left)
时间复杂度

该算法只遍历了一次BST,时间复杂度为O(n),其中n是树中节点的数量。空间复杂度为O(h),其中h是树的高度,是栈空间的消耗。