代码随想录算法训练营第第23天 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

  1. 修剪二叉搜索树

这道题目比较难,比 添加增加和删除节点难的多,建议先看视频理解。
题目链接/文章讲解: https://programmercarl.com/0669.修剪二叉搜索树.html
视频讲解: https://www.bilibili.com/video/BV17P41177ud

/**
 * @param {TreeNode} root
 * @param {number} low
 * @param {number} high
 * @return {TreeNode}
 */
var trimBST = function(root, low, 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;
};

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

本题就简单一些,可以尝试先自己做做。
https://programmercarl.com/0108.将有序数组转换为二叉搜索树.html
视频讲解:https://www.bilibili.com/video/BV1uR4y1X7qL

/**
 * @param {number[]} nums
 * @return {TreeNode}
 */
var sortedArrayToBST = function(nums) {
    if (nums.length === 0) return null;
    let mid = Math.floor(nums.length/2);
    const node = new TreeNode(nums[mid]);
    if (nums.length === 1) {
        return node;
    }
    node.left = sortedArrayToBST(nums.slice(0,mid));
    node.right = sortedArrayToBST(nums.slice(mid+1));
    return node;
};

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

本题也不难,在 求二叉搜索树的最小绝对差 和 众数 那两道题目 都讲过了 双指针法,思路是一样的。
https://programmercarl.com/0538.把二叉搜索树转换为累加树.html
视频讲解:https://www.bilibili.com/video/BV1d44y1f7wP

/**
 * @param {TreeNode} root
 * @return {TreeNode}
 */
var convertBST = function(root) {
    let total = 0;
    const traverse = (node)=>{
        if (node===null) {
            return;
        }
        traverse(node.right);
        total += node.val;
        node.val = total;
        
        traverse(node.left);
    }
    traverse(root);
    return root;
};
posted @ 2024-05-30 22:04  YuanYF6  阅读(1)  评论(0编辑  收藏  举报