标签:思路 output clear tree change tab question row blog
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
思路:注意利用BST中序遍历有序的特点,逆序遍历,在加和的时候一定要注意,先遍历右子树,处理当前节点,再遍历左子树。
1 void addGreaterSum(TreeNode*t, int* sum,bool* isfirst) 2 { 3 if (t == NULL) 4 return; 5 addGreaterSum(t->right, sum, isfirst); 6 if (t->right == NULL&&*isfirst) 7 { 8 *isfirst = false; 9 *sum = t->val; 10 } 11 else 12 { 13 int temp = t->val; 14 t->val += *sum; 15 *sum += temp; 16 } 17 18 addGreaterSum(t->left, sum, isfirst); 19 } 20 TreeNode* convertBST(TreeNode* root) 21 { 22 int sum = 0; 23 bool isfirst = true; 24 addGreaterSum(root, &sum, &isfirst); 25 return root; 26 }
LeetCode:Convert BST to Greater Tree
标签:思路 output clear tree change tab question row blog
原文地址:http://www.cnblogs.com/maclearning/p/6598499.html