Given 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 sum of all keys greater than the original key in BST.css
Example:node
Input: The root of a Binary Search Tree like this:
5
/ \
2 13
Output: The root of a Greater Tree like this:
18
/ \
20 13
題解思路:this
至關於本來是升序遍歷(左根右),如今變成了降序,可是生成這些數的順序是(右根左,逐漸累加)spa
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { int cur_sum = 0; public: TreeNode* convertBST(TreeNode* root) { travel(root); return root; } //變成了降序,可是生成能夠用 右根左 來生成 void travel(TreeNode *root) { if (!root) return; if (root->right) { travel(root->right); } root->val = (cur_sum += root->val); if (root->left) { travel(root->left); } } };