转换为累加树,就是把节点的值换成小于等于当前节点的值的和。根据二叉搜索树的特性,中序遍历是有序的,我们可以反过来右左根让它降序,然后再累加替换节点的值就是答案.
def bstToGst(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""
self.sum = 0
def inorder(root):
if not root:
return
inorder(root.right)
self.sum += root.val
root.val = self.sum
inorder(root.left)
inorder(root)
return root
相同思路迭代写法
def bstToGst(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""
summ = 0
stack = []
roott = root
while stack or root:
if root:
stack.append(root)
root = root.right
else:
tmp = stack.pop()
summ += tmp.val
tmp.val = summ
root = tmp.left
return roott