【LeetCode:1038. 从二叉搜索树到更大和树 | BST+DFS+中序遍历】

在这里插入图片描述

算法题

算法刷题专栏 | 面试必备算法 | 面试高频算法
越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
作者简介:硕风和炜,CSDN-Java领域新星创作者,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享
恭喜你发现一枚宝藏博主,赶快收入囊中吧
人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?

算法题

在这里插入图片描述

【LeetCode:1038. 从二叉搜索树到更大和树 | BST+DFS+中序遍历】_第1张图片

目录

    • 题目链接
    • ⛲ 题目描述
    • 求解思路&实现代码&运行结果
      • ⚡ 滑动窗口
        • 求解思路
        • 实现代码
        • 运行结果
    • 共勉

题目链接

  • 1038. 从二叉搜索树到更大和树

⛲ 题目描述

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

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

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

示例 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]

提示:

树中的节点数在 [1, 100] 范围内。
0 <= Node.val <= 100
树中的所有值均 不重复 。

注意:该题目与 538: https://leetcode-cn.com/problems/convert-bst-to-greater-tree/ 相同

求解思路&实现代码&运行结果


⚡ 滑动窗口

求解思路
  1. 按照右子树->根节点->左子树的顺序,递归遍历二叉搜索树,累加遍历过所有节点的val,然后每次赋值给对应的当前的root节点。
  2. 实现代码如下所示:
实现代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {

    int sum=0;

    public TreeNode bstToGst(TreeNode root) {
        if(root==null) return null;
        process(root);
        return root;
    }

    public void process(TreeNode root){
        if(root==null) return;
        process(root.right);
        sum+=root.val;
        root.val=sum;
        process(root.left);
    }
}
运行结果

【LeetCode:1038. 从二叉搜索树到更大和树 | BST+DFS+中序遍历】_第2张图片


共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

你可能感兴趣的:(LeetCode每日一题打卡,leetcode,深度优先,算法,java,二叉树,中序遍历,dfs)