📅  最后修改于: 2023-12-03 15:09:36.347000             🧑  作者: Mango
对于给定的二叉搜索树(BST)中的每个节点,将其值替换为大于或等于该节点的值的总和。
例如:
输入:
5
/ \
2 13
输出:
18
/ \
20 13
从右节点开始,一直遍历到叶子节点,每次累加父节点的值,并赋值给父节点。然后递归父节点的左孩子。
class Solution:
def convertBST(self, root: TreeNode) -> TreeNode:
self.sum = 0
def dfs(node):
if not node:
return
dfs(node.right)
self.sum += node.val
node.val = self.sum
dfs(node.left)
dfs(root)
return root
class Solution {
int sum = 0;
public TreeNode convertBST(TreeNode root) {
dfs(root);
return root;
}
private void dfs(TreeNode node) {
if (node == null) {
return;
}
dfs(node.right);
sum += node.val;
node.val = sum;
dfs(node.left);
}
}
var convertBST = function(root) {
let sum = 0;
const dfs = (node) => {
if (!node) {
return;
}
dfs(node.right);
sum += node.val;
node.val = sum;
dfs(node.left);
};
dfs(root);
return root;
};