leetcode-538. 把二叉搜索树转换为累加树

题目描述

给出二叉搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。

提醒一下,二叉搜索树满足下列约束条件:

  • 节点的左子树仅包含键小于节点键的节点。
  • 节点的右子树仅包含键大于 节点键的节点。
  • 左右子树也必须是二叉搜索树。

注意: 本题和 1038: . - 力扣(LeetCode) 相同

示例 1:

复制代码
输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]

示例 2:

复制代码
输入:root = [0,null,1]
输出:[1,null,1]

示例 3:

复制代码
输入:root = [1,0,2]
输出:[3,3,2]

示例 4:

复制代码
输入:root = [3,2,4,1]
输出:[7,9,4,10]

思路

反序中序遍历,使用递归

唯一困难的地方:中间的两行代码

1)需要设置一个记录全局累加的变量

2)之后先更新这个变量,self.res += root.val

3)更新根节点的值:root.val = self.res

4)其他的只要先遍历右子树,再遍历左子树就行

python 复制代码
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def __init__(self):
        self.res = 0
    def convertBST(self, root):
        """
        :type root: TreeNode
        :rtype: TreeNode
        """
        if not root:
            return None
        if root.right:
            self.convertBST(root.right)
        self.res += root.val 
        root.val = self.res
        if root.left:
            self.convertBST(root.left)
        return root
相关推荐
码云数智-大飞16 分钟前
RAII 与智能指针深度拆解
java·前端·算法
Dick50724 分钟前
ROS2 常用命令表
人工智能·学习·算法·机器人
apcipot_rain1 小时前
计科八股20260616(2)/面经——线性代数对称阵求n次幂、概率论最大似然估计
算法
cici158741 小时前
彩色图像模糊增强(Fuzzy Enhancement)MATLAB 实现
开发语言·算法·matlab
宝贝儿好2 小时前
【LLM】第二章:HuggingFace入门学习
人工智能·深度学习·神经网络·学习·算法·自然语言处理
凌波粒2 小时前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
啵啵啵鱼2 小时前
数组---完
算法·排序算法
嘿黑嘿呦2 小时前
chap 8排序
算法·蓝桥杯·排序算法·软件工程
richdata2 小时前
需求预测终极指南:零售商品预测方法、算法与AI实践
人工智能·算法·零售
隔窗听雨眠3 小时前
C语言函数递归从入门到精通(下):性能优化与工程实践
c语言·算法·性能优化