Given the root
of a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus the sum of all keys greater than the original key in BST.
As a reminder, a binary search tree is a tree that satisfies these constraints:
Example 1:
Input: root = [4,1,6,0,2,5,7,null,null,null,3,null,null,null,8] Output: [30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]
Example 2:
Input: root = [0,null,1] Output: [1,null,1]
Constraints:
[0, 104]
.-104 <= Node.val <= 104
root
is guaranteed to be a valid binary search tree.
Note: This question is the same as 1038: LeetCode-1038. Binary Search Tree to Greater Sum TreeLevel up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.https://leetcode.com/problems/binary-search-tree-to-greater-sum-tree/
- /**
- * 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* convertBST(TreeNode* root) {
- modify(root,0);
- return root;
- }
- int modify(TreeNode* root, int val){
- if (!root) return val;
- int r = modify(root->right, val);
- root->val += r;
- return modify(root->left,root->val);
- }
- };
- /**
- * Definition for a binary tree node.
- * public class TreeNode {
- * int val;
- * TreeNode left;
- * TreeNode right;
- * TreeNode() {}
- * TreeNode(int val) { this.val = val; }
- * TreeNode(int val, TreeNode left, TreeNode right) {
- * this.val = val;
- * this.left = left;
- * this.right = right;
- * }
- * }
- */
- class Solution {
- public TreeNode convertBST(TreeNode root) {
- modify(root,0);
- return root;
- }
- int modify(TreeNode root, int val){
- if (root == null) {return val;}
- int r = modify(root.right, val);
- root.val += r;
- return modify(root.left, root.val);
- }
- }