给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
例如:
输入: 原始二叉搜索树: 5 / \ 2 13 输出: 转换为累加树: 18 / \ 20 13
注意:本题和 1038: https://leetcode-cn.com/problems/binary-search-tree-to-greater-sum-tree/ 相同
DFS
先拿到整个二叉树所有的节点值放到列表里,然后DFS直接加和。
Code
def convertBST(self, root: TreeNode) -> TreeNode:
def getValues(node: TreeNode):
nonlocal values
if node:
values.append(node.val)
getValues(node.left)
getValues(node.right)
def dfs(node: TreeNode):
if node:
node.val += sum(values[values.index(node.val) + 1:])
dfs(node.left)
dfs(node.right)
values = []
getValues(root)
values.sort()
dfs(root)
return root
写博客的时候才发现题目说的是二叉搜索树,直接把当前节点值累加右子树节点值就可以了,草率了。