1038. 从二叉搜索树到更大和树 --力扣 --JAVA

简介: 给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。提醒一下, 二叉搜索树 满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。

 题目

给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。

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

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

    解题思路

      1. 由题意可知需要先获取右子树的值累加再赋值给当前节点,因此使用递归;
      2. 创建全局变量用来存储累加后的值;
      3. 右子树是先递归再赋值,左子树需要先赋值再递归,因为左子树的值小于当前节点。

      代码展示

      class Solution {
          private int sum = 0;
          public TreeNode bstToGst(TreeNode root) {
              if(root == null){
                  return null;
              }
              bstToGst(root.right);
              sum += root.val;
              //左子树节点的值小于根节点,所以当存在左子树是需要先赋值再递归
              if(root.left != null){
                  root.val = sum;
                  bstToGst(root.left);
              } else {
                  root.val = sum;
              }
              return root;
          }
      }

      image.gif


      目录
      相关文章
      |
      存储 算法 Java
      解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
      在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。
      【LeetCode 45】701.二叉搜索树中的插入操作
      【LeetCode 45】701.二叉搜索树中的插入操作
      212 1
      【LeetCode 44】235.二叉搜索树的最近公共祖先
      【LeetCode 44】235.二叉搜索树的最近公共祖先
      212 1
      |
      算法 Java
      LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
      LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
      289 6
      |
      存储 Java
      Java 中的 TreeMap 是用哪种树来实现的?
      【8月更文挑战第22天】
      330 1
      |
      存储 算法 Java
      LeetCode经典算法题:打家劫舍java详解
      LeetCode经典算法题:打家劫舍java详解
      351 2
      LeetCode第96题不同的二叉搜索树
      文章介绍了LeetCode第96题"不同的二叉搜索树"的解法,利用动态规划的思想和递推公式,通过计算以任意节点为根的不同二叉搜索树的数量,解决了该问题。
      LeetCode第96题不同的二叉搜索树
      |
      人工智能 算法 Java
      LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
      LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
      307 1
      |
      存储 算法 Java
      LeetCode经典算法题:预测赢家+香槟塔java解法
      LeetCode经典算法题:预测赢家+香槟塔java解法
      338 1
      【LeetCode 48】108.将有序数组转换为二叉搜索树
      【LeetCode 48】108.将有序数组转换为二叉搜索树
      230 0