修剪二叉搜索树,将有序数组转换为二叉搜索树

44 阅读1分钟

修剪二叉搜索树

[题目](669. 修剪二叉搜索树)

代码实现

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* trimBST(TreeNode* root, int low, int high) {
        if (!root) {
            return nullptr;
        }
        if (root->val < low) {
            // 寻找符合区间[low, high]的节点
            TreeNode* right = trimBST(root->right, low, high);
            return right;
        }
        if (root->val > hight) {
            // 寻找符合区间[low, high]的节点
            TreeNode* left = trimBST(root->left, low, high);
            return left;
        }
        // root->left接入符合条件的左孩子
        root->left = trimBST(root->left, low, high);
        // root->right接入符合条件的右孩子
        root->right = trimBST(root->right, low, high);
        return root;
    }
};

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

[题目](108. 将有序数组转换为二叉搜索树)

重点

需要选择中间节点

代码实现

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
private:
    TreeNode* traversal(vector<int> & nums, int left, int right) {
        // 左闭右闭
        if (left > right) {
            return nullptr;
        }
        int mid = left + (right - left) / 2;
        TreeNode* root = new TreeNode(nums[mid]);
        root->left = traversal(nums, left, mid - 1);
        root->right = traversal(nums, mid + 1, right);
        return root;
    }
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        TreeNode* root = traversal(nums, 0, nums.size() - 1);
        return root;
    }
};