首页 > 编程语言 >代码随想录算法训练营,9月17日 | 669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树

代码随想录算法训练营,9月17日 | 669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树

时间:2024-09-17 13:13:57浏览次数:11  
标签:right TreeNode 随想录 二叉 搜索 root left

669. 修剪二叉搜索树
题目链接:669. 修剪二叉搜索树
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰修剪二叉搜索树
日期:2024-09-17

想法:节点为空返回空,值在中间时,继续递归左右两边,小于时递归右子树,大于时递归左子树
Java代码如下:

class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        if(root == null) return null;
        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;
    }
}

108.将有序数组转换为二叉搜索树
题目链接:108.将有序数组转换为二叉搜索树
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰将有序数组转换为二叉搜索树
日期:2024-09-17

想法:跟构造二叉树同样的思路,用下标表示递归的范围,很简单。
Java代码如下:

class Solution {
    public TreeNode sortedArrayToBST1(int[] nums, int left, int right){
        if(left > right) return null;
        int mid = left + (right - left) / 2;
        TreeNode node = new TreeNode(nums[mid]);
        node.left = sortedArrayToBST1(nums, left, mid - 1);
        node.right = sortedArrayToBST1(nums, mid + 1, right);
        return node;
    }
    public TreeNode sortedArrayToBST(int[] nums) {
        TreeNode root = sortedArrayToBST1(nums, 0, nums.length - 1);
        return root;
    }
}

538.把二叉搜索树转换为累加树
题目链接:538.把二叉搜索树转换为累加树
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰把二叉搜索树转换为累加树
日期:2024-09-17

想法:反中序遍历累加
Java代码如下:

class Solution {
    int sum;
    public TreeNode convertBST(TreeNode root) {
        sum = 0;
        convertBST1(root);
        return root;
    }

    public void convertBST1(TreeNode root) {
        if (root == null) {
            return;
        }
        convertBST1(root.right);
        sum += root.val;
        root.val = sum;
        convertBST1(root.left);
    }
}

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

相关文章

  • 数据结构-树和二叉树
      树和二叉树 1.树的概念   树tree     是n(n>=0)个节点的有限集    在任意的一个非空树中       (1)有且仅有一个特定的被称为根(root)的节点       (2)当n>1时,其余的节点可分为m(m>0)个互不相交的有限......
  • 【SCI2区】麻雀搜索算法SSA-TCN-Multihead-Attention回归预测(多输入单输出)【含Matlab
    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信或扫描文章底部QQ二维码。......
  • 代码随想录Day15 动态规划--2
    01背包理论基础01背包是有一个背包有M的容量给我们N个物品每个物品有自己的价值我们需要装进背包里尽可能获得最大的价值分析题目把背包想象成一个二维数组先遍历每个物品放入背包里面dp数组的含义表示的就是背包所含有的价值当我们遍历物品1的时候我们要开始更新背包......
  • 代码随想录算法 - 二叉树7
    题目1669.修剪二叉搜索树给你二叉搜索树的根节点root,同时给定最小边界low和最大边界high。通过修剪二叉搜索树,使得所有节点的值在[low,high]中。修剪树不应该改变保留在树中的元素的相对结构(即,如果没有被移除,原有的父代子代关系都应当保留)。可以证明,存在唯一的答案......
  • Java数据存储结构——二叉查找树
    文章目录22.1.2二叉查找树22.1.2.1概述22.1.2.1二叉查找树添加节点22.1.2.2二叉查找树查找节点22.1.2.3二叉树遍历22.1.2.4二叉查找树的弊端22.1.2二叉查找树22.1.2.1概述二叉查找树,又称二叉排序树或者二叉搜索树二叉查找树的特点:每一个节点上最多有两个......
  • Day17 二叉树part07| LeetCode 235. 二叉搜索树的最近公共祖先 ,701.二叉搜索树中的插
    235.二叉搜索树的最近公共祖先235.二叉搜索树的最近公共祖先利用二叉搜索树的特性——有序树,可知,如果中间节点是p和q的公共节点,那个中间节点的数值一定在[p,q]区间因此,从根节点往下搜索,遇到的第一个位于[p,q]或[q,p]区间的节点就是最近公共祖先classSolution{......
  • leetcode刷题day20|二叉树Part08(669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索
    669.修剪二叉搜索树思路:理解了删除二叉搜索树中的节点,这个题理解起来就不难了。还是选用中序遍历递归。递归三步曲:1、传入参数:根节点,最小值,最大值;返回值为根节点;2、终止条件:如果节点为空,直接返回空;3、递归逻辑:如果最小值小于该节点,递归调用该节点的右孩子(检查右孩子......
  • leetcode刷题day19|二叉树Part07(235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的
    235.二叉搜索树的最近公共祖先思路:二叉搜索树首先考虑中序遍历。根据二叉搜索树的特性,如果p,q分别在中间节点的左右两边,该中间节点一定是最近公共祖先,如果在同一侧,则递归这一侧即可。递归三部曲:1、传入参数:根节点,p,q,返回节点。2、终止条件:因为p,q一定存在,所以不会遍历到......
  • 搜索 DFS深度优先搜索
    洛谷P1363幻象迷宫这种恶魔样例究竟是哪个天才想出来的?!!!!!!620#.##.##.##.##.##.##.#.##.##.##.##.##.##.#.##.##.##.##.##.##.S.#..#..#..#..#..#..##..#..#..#..#..#..##..#..#..#..#..#..##md,交了好几发都没过,看了一下这个样例,心都凉了。能想出来这题解的更是天才Orz......
  • 代码随想录算法 - 二叉树6
    题目1235.二叉搜索树的最近公共祖先给定一个二叉搜索树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个结点p、q,最近公共祖先表示为一个结点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。”例如......