算法训练1-day18-二叉树

22 阅读1分钟

今天是二叉树

  1. 669. 修剪二叉搜索树

AC代码:

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

AC代码:

class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return _sortedArrayToBST(nums, 0, nums.size() - 1);
    }

    TreeNode* _sortedArrayToBST(vector<int>& nums, int left, int right) {
        if (left > right) return nullptr;
        int mid = (left + right) / 2;
        TreeNode* root = new TreeNode(nums[mid]);

        root->left = _sortedArrayToBST(nums, left, mid - 1);
        root->right = _sortedArrayToBST(nums, mid + 1, right);
        return root;
    }
};
  1. 538. 把二叉搜索树转换为累加树

代码如下:

class Solution {
public:
    TreeNode* convertBST(TreeNode* root) {
        _convertBST(root, 0);
        return root;
    }

    int _convertBST(TreeNode* root, int prevSum)
    {
        if(root == nullptr) return prevSum;

        root->val += _convertBST(root->right, prevSum);
        return _convertBST(root->left, root->val);
    }
};