📌  相关文章
📜  将所有更大的值添加到给定BST中的每个节点(1)

📅  最后修改于: 2023-12-03 15:09:36.347000             🧑  作者: Mango

将所有更大的值添加到给定BST中的每个节点
简介

对于给定的二叉搜索树(BST)中的每个节点,将其值替换为大于或等于该节点的值的总和。

例如:

输入:
         5
       /   \
      2     13

输出:
         18
       /   \
     20     13
解法

从右节点开始,一直遍历到叶子节点,每次累加父节点的值,并赋值给父节点。然后递归父节点的左孩子。

  • 时间复杂度:$O(n)$
  • 空间复杂度: $O(n)$(递归调用的栈深度)
代码
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;
};