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


      目录
      相关文章
      |
      1月前
      【LeetCode 45】701.二叉搜索树中的插入操作
      【LeetCode 45】701.二叉搜索树中的插入操作
      10 1
      |
      1月前
      【LeetCode 44】235.二叉搜索树的最近公共祖先
      【LeetCode 44】235.二叉搜索树的最近公共祖先
      17 1
      |
      1月前
      【LeetCode 48】108.将有序数组转换为二叉搜索树
      【LeetCode 48】108.将有序数组转换为二叉搜索树
      40 0
      |
      1月前
      【LeetCode 47】669.修剪二叉搜索树
      【LeetCode 47】669.修剪二叉搜索树
      10 0
      |
      1月前
      【LeetCode 46】450.删除二叉搜索树的节点
      【LeetCode 46】450.删除二叉搜索树的节点
      16 0
      |
      1月前
      【LeetCode 42】501.二叉搜索树中的众数
      【LeetCode 42】501.二叉搜索树中的众数
      8 0
      |
      1月前
      【LeetCode 41】530.二叉搜索树的最小绝对差
      【LeetCode 41】530.二叉搜索树的最小绝对差
      11 0
      |
      1月前
      【LeetCode 40】98.验证二叉搜索树
      【LeetCode 40】98.验证二叉搜索树
      11 0
      |
      1月前
      【LeetCode 39】700.二叉搜索树中的搜索
      【LeetCode 39】700.二叉搜索树中的搜索
      16 0
      |
      1月前
      |
      算法 Java
      LeetCode(一)Java
      LeetCode(一)Java