力扣labuladong——一刷day36

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • [一、力扣230. 二叉搜索树中第K小的元素](#一、力扣230. 二叉搜索树中第K小的元素)
  • [二、力扣538. 把二叉搜索树转换为累加树](#二、力扣538. 把二叉搜索树转换为累加树)
  • [三、力扣1038. 从二叉搜索树到更大和树](#三、力扣1038. 从二叉搜索树到更大和树)

前言


首先,BST 的特性大家应该都很熟悉了: 1、对于 BST 的每一个节点 node,左子树节点的值都比 node 的值要小,右子树节点的值都比 node 的值大。 2、对于 BST 的每一个节点 node,它的左侧子树和右侧子树都是 BST。

一、力扣230. 二叉搜索树中第K小的元素

java 复制代码
/**
 * 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 {
    List<Integer> list = new ArrayList<>();
    public int kthSmallest(TreeNode root, int k) {
        fun(root);
        return list.get(k-1);
    }
    public void fun(TreeNode root){
        if(root == null){
            return ;
        }
        fun(root.left);
        list.add(root.val);
        fun(root.right);
    }
}

不使用额外空间

java 复制代码
/**
 * 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 res = 0,count = 0;
    public int kthSmallest(TreeNode root, int k) {
        fun(root,k);
        return res;
    }
    public void fun(TreeNode root,int k){
        if(root == null){
            return ;
        }
        fun(root.left,k);
        count ++;
        if(count == k){
            res = root.val;
            return ;
        }
        fun(root.right,k);
    }
}

二、力扣538. 把二叉搜索树转换为累加树

java 复制代码
/**
 * 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 count = 0;
    public TreeNode convertBST(TreeNode root) {
        fun(root);
        return root;
    }
    public void fun(TreeNode root){
        if(root == null){
            return ;
        }
        fun(root.right);
        count += root.val;
        root.val = count;
        fun(root.left);
    }
}

三、力扣1038. 从二叉搜索树到更大和树

java 复制代码
/**
 * 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 count = 0;
    public TreeNode bstToGst(TreeNode root) {
        fun(root);
        return root;
    }
    public void fun(TreeNode root){
        if(root == null){
            return;
        }
        fun(root.right);
        count += root.val;
        root.val = count;
        fun(root.left);
    }
}
相关推荐
是一个Bug10 分钟前
Java基础50道经典面试题(四)
java·windows·python
Slow菜鸟12 分钟前
Java基础架构设计(三)| 通用响应与异常处理(分布式应用通用方案)
java·开发语言
wadesir30 分钟前
Rust中的条件变量详解(使用Condvar的wait方法实现线程同步)
开发语言·算法·rust
我是Superman丶31 分钟前
《Spring WebFlux 实战:基于 SSE 实现多类型事件流(支持聊天消息、元数据与控制指令混合传输)》
java
廋到被风吹走44 分钟前
【Spring】常用注解分类整理
java·后端·spring
是一个Bug1 小时前
Java基础20道经典面试题(二)
java·开发语言
yugi9878381 小时前
基于MATLAB实现协同过滤电影推荐系统
算法·matlab
TimberWill1 小时前
哈希-02-最长连续序列
算法·leetcode·排序算法
Z_Easen1 小时前
Spring 之元编程
java·开发语言
Morwit1 小时前
【力扣hot100】64. 最小路径和
c++·算法·leetcode