right-middle-left reverse order traversal O(n)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
class Solution { public: TreeNode* convertBST(TreeNode* root) { if (!root) return root; convertBST(root->right); sum = (root->val += sum); convertBST(root->left); return root; }
int sum = 0; };
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
class Solution { public: TreeNode* convertBST(TreeNode* root) { int sum = 0; helper(root, sum); return root; }
void helper(TreeNode *root, int &sum) { if (!root) return; helper(root->right, sum); root->val += sum; sum = root->val; helper(root->left, sum); } };
|