-
Notifications
You must be signed in to change notification settings - Fork 0
/
BST_maximum_difference(GFG).cpp
37 lines (29 loc) · 1.05 KB
/
BST_maximum_difference(GFG).cpp
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
26
27
28
29
30
31
32
33
34
35
36
37
class Solution {
public:
int find(Node* root, int target, Node** targetNode) {
if (root == NULL) return INT_MIN;
if (root->data == target) {
*targetNode = root;
return target;
}
if (target > root->data) {
return root->data + find(root->right, target, targetNode);
} else {
return root->data + find(root->left, target, targetNode);
}
}
int solve(Node* root) {
if (root == NULL) return INT_MAX / 2;
if (root->left == NULL && root->right == NULL) return root->data;
int left = root->data + solve(root->left);
int right = root->data + solve(root->right);
return min(left, right);
}
int maxDifferenceBST(Node* root, int target) {
Node* targetNode = NULL;
int rootToTarget = find(root, target, &targetNode);
if (targetNode == NULL) return -1;
int targetToLeaf = solve(targetNode);
return rootToTarget - targetToLeaf;
}
};