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

47 阅读1分钟

669.修剪二叉搜索树

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

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

669. 修剪二叉搜索树

var trimBST = function(root, low, high) {
    if (!root)  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. 将有序数组转换为二叉搜索树

  • key:区间思想 & 循环不变量 p.s. 截取区间,而不是直接传子区间
var sortedArrayToBST = function(nums) {
    const traverse = (left, right) => {
        if (left > right)  return null;
        const mid = left + Math.floor((right - left)/2);
        const node = new TreeNode(nums[mid]);
        node.left = traverse(left, mid-1);
        node.right = traverse(mid+1, right);
        return node;
    }

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

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

  • 感想:累加树 = 中序遍历过程中的累加
var convertBST = function(root) {
    let pre = 0;

    const tranverse = (node) => {
        if (!node)  return;

        tranverse(node.right);
        node.val += pre;
        pre = node.val;
        tranverse(node.left);
    }

    tranverse(root);
    return root;
};