538. 把二叉搜索树转换为累加树
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
例如:
输入: 二叉搜索树:
5
/ \
2 13
输出: 转换为累加树:
18
/ \
20 13
思路:
- 先递归到右子树的最右的叶子节点开始,逐渐累加
- 到根节点后,将右子树的累加和加到根节点,然后转化左子树
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def convertBST(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""
self.helper(root, 0)
return root
def helper(self, root, right_sum):
if not root:
return right_sum
right_sum = self.helper(root.right, right_sum)
root.val += right_sum
right_sum = root.val
right_sum = self.helper(root.left, right_sum)
return right_sum