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

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

时间:2023-03-23 09:22:05浏览次数:41  
标签:right TreeNode val 随想录 二叉 搜索 root left

669 修剪二叉搜索树
给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。

修剪的操作并不是在终止条件上进行的,所以就是遇到空节点返回就可以了。

如果root(当前节点)的元素小于low的数值,那么应该递归右子树,并返回右子树符合条件的头结点。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode trimBST(TreeNode root, int L, int R) {
        if (root == null) return null;
        if (root.val < L) return trimBST(root.right, L , R);
        if (root.val > R) return trimBST(root.left, L , R);
        
        root.left = trimBST(root.left, L, R);
        root.right = trimBST(root.right, L, R);
        return root;
    }
}
 

.将有序数组转换为二叉搜索树

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
确定递归终止条件 这里定义的是左闭右闭的区间,所以当区间 left > right的时候,就是空节点了。

root的左孩子接住下一层左区间的构造节点,右孩子接住下一层右区间构造的节点。

/**
 * 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 {

    public TreeNode sortedArrayToBST(int[] nums) {

        return helper(0, nums.length - 1, nums );
    }

    private TreeNode helper(int left, int right, int[] nums) {
        if (left > right) return null;
        int p = (left + right) / 2;
        TreeNode root = new TreeNode(nums[p]);
        root.left = helper(left, p - 1, nums);
        root.right = helper(p + 1, right, nums);
        return root;
    }
}

538. 把二叉搜索树转换为累加树
给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。
利用中序遍历

class Solution {
    int sum = 0;
    public TreeNode convertBST(TreeNode root) {
        sum = 0;
        helper(root);
        return root;
    }
    private void helper(TreeNode root) {
        if (root == null) return;
        helper(root.right);
        sum += root.val;
        root.val = sum;
        helper(root.left);
    }
}

 

 

 

标签:right,TreeNode,val,随想录,二叉,搜索,root,left
From: https://www.cnblogs.com/libertylhy/p/17246236.html

相关文章

  • 力扣---剑指 Offer 32 - II. 从上到下打印二叉树 II
    从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树:[3,9,20,null,null,15,7],   3  /\ 9 20   / \  15 ......
  • 分布式搜索elasticsearch几个概念解析
    介绍下es的几个概念:cluster    代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中......
  • 力扣---剑指 Offer 32 - I. 从上到下打印二叉树
    从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树:[3,9,20,null,null,15,7],   3  /\ 9 20   / \  15  7返......
  • LeetCode.94 二叉树的中序遍历
    1.题目:给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例1:输入:root=[1,null,2,3]输出:[1,3,2]方法一:递归:classSolution{publicList<Integer>ino......
  • 代码随想录算法训练营Day50 动态规划
    代码随想录算法训练营代码随想录算法训练营Day50动态规划|123.买卖股票的最佳时机III188.买卖股票的最佳时机IV123.买卖股票的最佳时机III题目链接:123.买卖股票的最......
  • 分布式搜索算法,算法
    对于搜索引擎来说,索引存放在成千上万台机器上,如何进行分布式搜索呢? 假设搜索结果是以分页的方式显示,以PageNumber代表当前页,从1开始,以PageSize代表页面大小,默认为10,以N代表......
  • Java 全文搜索框架 Lucene
    Lucene是apache软件基金会一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员......
  • day22 打卡235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉
    day22打卡235.二叉搜索树的最近公共祖先701.二叉搜索树中的插入操作450.删除二叉搜索树中的节点235.二叉搜索树的最近公共祖先235题目链接1.递归法。利用二叉搜素......
  • elasticsearch RESTful搜索引擎-(java jest 使用[入门])
     elasticsearch简称ESjest好吧下面我介绍下jest(第三方工具)它是ES的java客户端,基于httprestful...jest是开源的 首先看看项目的目录结构我一般习惯了用maven去管理我的......
  • 二叉搜索树
    BST二叉搜索树任一节点均不小于/不大于其左/右后代BST的中序遍历序列,必然单调非降BST的查找:减而治之O(h)。BST的插入:O(h)。BST的删除:O(h)。平衡二叉搜索树BST的......