📅  最后修改于: 2023-12-03 15:09:33.156000             🧑  作者: Mango
二叉搜索树(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是树的高度,是栈空间的消耗。