TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        TreeNode* ret = NULL;
        if (nums.size() == 0) return ret;

        auto maximum = max_element(nums.begin(), nums.end());
        int dis = distance(nums.begin(), maximum);
        ret = new TreeNode(*maximum);

        vector<int> left(nums.begin(), nums.begin() + dis);
        vector<int> right(nums.begin() + dis + 1, nums.end());

        ret->left = constructMaximumBinaryTree(left);
        ret->right = constructMaximumBinaryTree(right);
        return ret;
    }
Beispiel #2
0
 TreeNode* constructMaximumBinaryTree(vector<int>& nums, int l, int r) {
     if (l == r) {
         return nullptr;
     } else if (l + 1 == r) {
         return new TreeNode(nums[l]);
     }
     int idx = l;
     for (int i = l + 1; i < r; i++) {
         if (nums[idx] < nums[i]) {
             idx = i;
         }
     }
     TreeNode* root = new TreeNode(nums[idx]);
     root->left = constructMaximumBinaryTree(nums, l, idx);
     root->right = constructMaximumBinaryTree(nums, idx + 1, r);
     return root;
 }
 TreeNode* insertIntoMaxTree(TreeNode* root, int val) {
     vector<int> original_list = findOriginalList(root);
     original_list.push_back(val);
     return constructMaximumBinaryTree(original_list);
 }
Beispiel #4
0
 TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
     int n = nums.size();
     return constructMaximumBinaryTree(nums, 0, n);
 }