首页 > 其他分享 >代码随想录 第23天 | 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树 ● 总结篇

代码随想录 第23天 | 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树 ● 总结篇

时间:2024-03-17 16:24:11浏览次数:29  
标签:right TreeNode 随想录 二叉 搜索 return root left

leetcode:669. 修剪二叉搜索树 - 力扣(LeetCode)

class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        //和删除差不多,怕删除的节点的左右孩子节点有符合范围的,所以要每次判断一下,如果有不符合要求的就直接返回上一个节点。
        if( root == null) return root;
        //删除节点,判断该节点右孩子有没有符合题目范围的
        if( root.val < low){
            return trimBST(root.right,low,high);
        }
        //删除节点判断该节点左孩子有没有符合题目范围的
        if(root.val > high ){
            return trimBST(root.left,low,high);
        }
        //遍历深度
        root.left = trimBST(root.left,low,high);
        root.right = trimBST(root.right,low,high);
        //有就返回
        return root;

    }
}

 leetcode:108. 将有序数组转换为二叉搜索树 - 力扣(LeetCode)

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {

        return gettree(nums,0,nums.length - 1);
    }
    public TreeNode gettree(int[] nums,int left,int right){
        //判断越界
        if(left > right) return null;
        int mid = (left + right)/2;
        //将中间节点作为根节点
        TreeNode node = new TreeNode(nums[mid]);
        //将数组区分成左右节点。
        node.left = gettree(nums,left,mid-1);
        node.right = gettree(nums,mid+1,right);
        return node;


    }
}

leetcode:538. 把二叉搜索树转换为累加树 - 力扣(LeetCode)

class Solution {
    //初始0
    TreeNode pre = new TreeNode(0);
    public TreeNode convertBST(TreeNode root) {
    //终止条件
        if( root == null) return null;
        //因为是后续遍历的倒序,所以是右中左
        //右
        root.right = convertBST(root.right);
        //中,将累加的值赋给root
        pre.val += root.val;
        root.val = pre.val;
        //左
        root.left = convertBST(root.left);
        return root;
    }
}

 

标签:right,TreeNode,随想录,二叉,搜索,return,root,left
From: https://www.cnblogs.com/lengbo/p/18078458

相关文章

  • 数据结构笔记(十四)二叉树的遍历(递归)
    四种访问方式:前序遍历,中序遍历,后序遍历,层序遍历这篇文章主要为前序,中序,后序遍历的递归形式,递归形式较为简单,后面更新遍历的循环形式较为复杂,建议使用递归形式#include<stdio.h>#include<stdlib.h>typedefcharE;typedefstructTreeNode*Node;structTreeNod......
  • 3.二分搜索
    定义Step1:计算数据的中点索引值m=(i+j)/2向下取整。i为首元素索引,j为尾元素索引。Step2:判断nums[m]和target的大小关系,分为以下三种情况。当nums[m]<target时,说明target在区间中:i=m+1当nums[m]>target时,说明target在区间中:j=m-1当nums[m]......
  • 【喜大普奔】Dynamo节点搜索功能官方终于优化了
    Hello大家好!我是九哥~用Dynamo的小伙伴,一直都在诟病其检索功能的拉胯,每次搜个节点都是一卡一卡的,好不容易搜完了,还不是自己想要的结果,奈何官方却迟迟没见动作。早先时候,在群里分享过一个节点包:Monocle,装了以后呢,可以使用第三方的搜索栏,效果是杠杠的啊,速度特别快。但是,有......
  • 【洛谷 P8602】[蓝桥杯 2013 省 A] 大臣的旅费 题解(图论+深度优先搜索+树的直径+链式
    [蓝桥杯2013省A]大臣的旅费题目描述很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同......
  • 代码随想录: 栈和队列
    cpp中stack和queue都是一种适配器。三个最为普遍的STL版本:HPSTL其他版本的C++STL,一般是以HPSTL为蓝本实现出来的,HPSTL是C++STL的第一个实现版本,而且开放源代码。P.J.PlaugerSTL由P.J.Plauger参照HPSTL实现出来的,被VisualC++编译器所采用,不是开源的。SGISTL由Sili......
  • 代码随想录 第22天 | ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入
    leetcode:701.二叉搜索树中的插入操作-力扣(LeetCode)classSolution{publicTreeNodeinsertIntoBST(TreeNoderoot,intval){//判断叶子结点,null说明到了,可以赋值。if(root==null){TreeNodenode=newTreeNode(val);return......
  • 代码随想录算法训练营第十天(栈和队列I)| 232. 用栈实现队列、225. 用队列实现栈(JAVA)
    文章目录栈和队列理论基础概念方法栈队列232.用栈实现队列解题思路源码225.用队列实现栈解题思路源码总结栈和队列理论基础概念栈:后进先出队列:先进先出方法栈方法名作用Stackstack=newStack<>();构造栈stack.push(Ee)将e入栈,并返回estack.pop()将栈......
  • LeetCode题练习与总结:搜索插入位置
    一、题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(logn)的算法。二、解题思路初始化两个指针,left指向数组的起始位置,right指向数组的结束位置。当left小于等......
  • 代码随想录算法训练营第六十天 | 单调栈 柱状图中最大的矩形 完结撒花
    目录柱状图中最大的矩形LeetCode84.柱状图中最大的矩形柱状图中最大的矩形双指针解法本题要记录记录每个柱子左边第一个小于该柱子的下标,而不是左边第一个小于该柱子的高度。在寻找的过程中使用了whileclassSolution{publicintlargestRectangleArea(in......
  • 代码随想录算法训练营第五九天 | 下一个更大元素II、接雨水
    目录下一个更大元素II接雨水LeetCode503.下一个更大元素IILeetCode42.接雨水下一个更大元素II给定一个循环数组nums(nums[nums.length-1]的下一个元素是nums[0]),返回nums中每个元素的下一个更大元素。数字x的下一个更大的元素是按数组遍历顺序,这......