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.
Example:
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
Morris Traversal:
TreeNode* convertBST(TreeNode* root) {
int sum = 0;
TreeNode* node = root;
while(node){
if(node->right == NULL){
sum += node->val;
node->val = sum;
node = node->left;
}
else{
//find the successor
TreeNode* succ = node->right;
while(succ->left && succ->left != node)
succ = succ->left;
if(succ->left == NULL){
succ->left = node;
node = node->right;
}
else{
succ->left = NULL;
sum += node->val;
node->val = sum;
node = node->left;
}
}
}
return root;
}
解析:
https://leetcode.com/problems/convert-bst-to-greater-tree/solution/
网友评论