代码随想录第十二天|二叉树(5)

目录

LeetCode 669. 修剪二叉搜索树

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

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


LeetCode 669. 修剪二叉搜索树

题目链接:LeetCode 669. 修剪二叉搜索树

思想:本题其实比较简单,首先就是遍历整棵树,遇到节点的值如果不在所要求的区间范围内的话,就进行以下处理;如果节点值大于右边界,就返回当前节点的左节点;反之就返回当前节点的右节点。

代码如下:

    TreeNode* trimBST(TreeNode* root, int low, int high) {
        if (!root) return nullptr;
        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 108. 将有序数组转换为二叉搜索树

思想:其实本题特别像之前的一道根据前中序序列构造二叉树,大体上与其十分相似,只是确定root节点的时候,取数组最中间的元素即可。

代码如下:

    TreeNode* sortedArrayToBST(vector<int>& nums) {
        if (nums.size() == 0) return NULL;
        int rootIndex = nums.size() / 2;
        int rootValue = nums[rootIndex];
        TreeNode* cur = new TreeNode(rootValue);
        if (nums.size() == 1) return cur;
        vector<int> left(nums.begin(), nums.begin() + rootIndex);
        vector<int> right(nums.begin() + rootIndex + 1, nums.end());
        cur->left = sortedArrayToBST(left);
        cur->right = sortedArrayToBST(right);
        return cur;
    }

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

题目链接:LeetCode 538. 把二叉搜索树转换为累加树

思想:本题的意思其实是,将一个二叉搜索树转化为升序数组的话,例如[1,2,3],其对应的累加树序列就是,每个数加其本身以及大于本身的元素,即[6,5,1]。那这样的就是每个数加其本身以及后面的数。我们知道中序遍历出来的是升序二叉搜索树数组,那么反中序遍历也就是右中左的话,出来的就是降序二叉搜索树数组,就可以从前一直加到最后了。

代码如下:

    int pre = 0;
    void traversal(TreeNode* cur){
        if(!cur) return;
        traversal(cur->right);
        cur->val += pre;
        pre = cur->val;
        traversal(cur->left);
    }

    TreeNode* convertBST(TreeNode* root) {
        if (!root) return NULL;
        traversal(root);
        return root;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值