#include <iostream>
using namespace std;
int ans = 0;
struct Node{
int data;
struct Node* left;
struct Node* right;
Node(int val, Node* l = NULL, Node* r = NULL){
data = val;
left = l;
right = r;
}
}*X,*Y;
class BinaryTree{
Node* Root;
public:
BinaryTree(){
Root = NULL;
}
void Construct(){
Node* d = new Node(100);
Node* e = new Node(300);
//Node* f = new Node(25,l,m);
Node* g = new Node(10);
Node* b = new Node(5,d,e);
Node* c = new Node(8,NULL,g);
Node* a = new Node(1,b,c);
Root = a;
}
void PrintInOrder(Node *temp){
if(temp != NULL){
PrintInOrder(temp -> left);
cout << temp -> data << endl;
PrintInOrder(temp -> right);
}
}
void PrintBT(){
PrintInOrder(Root);
}
void Solve(){
Node* Lmax;
Solve(Root,0, Lmax);
}
int Solve(Node *curr, int sumFromParent, Node* &L){
if(curr == NULL){
L = NULL;
return 0;
}
if(curr -> left == NULL && curr -> right == NULL){
L = curr;
return curr -> data;
}
Node* lx;
Node* ry;
int sumFromRootToCurr = sumFromParent + curr -> data;
int lMaxFromLeaf = Solve(curr -> left, sumFromRootToCurr, lx);
int rMaxFromLeaf = Solve(curr -> right, sumFromRootToCurr, ry);
(lMaxFromLeaf > rMaxFromLeaf) ? (L = lx) : (L = ry);
if(ans < sumFromRootToCurr + lMaxFromLeaf + rMaxFromLeaf){
ans = sumFromRootToCurr + lMaxFromLeaf + rMaxFromLeaf;
X = lx;
Y = ry;
}
return (curr -> data + max(lMaxFromLeaf,rMaxFromLeaf));
}
};
int main(){
BinaryTree bt;
bt.Construct();
//bt.PrintBT();
bt.Solve();
cout << "X : " << X -> data << endl;
cout << "Y : " << Y -> data << endl;
cout << "Required Value : " << ans << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmludCBhbnMgPSAwOwogCnN0cnVjdCBOb2RlewogICAgICAgIGludCBkYXRhOwogICAgICAgIHN0cnVjdCBOb2RlKiBsZWZ0OwogICAgICAgIHN0cnVjdCBOb2RlKiByaWdodDsKICAgICAgICAKICAgICAgICBOb2RlKGludCB2YWwsIE5vZGUqIGwgPSBOVUxMLCBOb2RlKiByID0gTlVMTCl7CiAgICAgICAgICAgICAgICBkYXRhID0gdmFsOwogICAgICAgICAgICAgICAgbGVmdCA9IGw7CiAgICAgICAgICAgICAgICByaWdodCA9IHI7CiAgICAgICAgfQp9KlgsKlk7CiAKY2xhc3MgQmluYXJ5VHJlZXsKICAgICAgICBOb2RlKiBSb290OwogICAgICAgIAogICAgICAgIHB1YmxpYzoKICAgICAgICBCaW5hcnlUcmVlKCl7CiAgICAgICAgICAgICAgICBSb290ID0gTlVMTDsKICAgICAgICB9CiAgICAgICAgdm9pZCBDb25zdHJ1Y3QoKXsKICAgICAgICAgICAgICAgIE5vZGUqIGQgPSBuZXcgTm9kZSgxMDApOwogICAgICAgICAgICAgICAgTm9kZSogZSA9IG5ldyBOb2RlKDMwMCk7CiAgICAgICAgICAgICAgICAvL05vZGUqIGYgPSBuZXcgTm9kZSgyNSxsLG0pOwogICAgICAgICAgICAgICAgTm9kZSogZyA9IG5ldyBOb2RlKDEwKTsKICAgICAgICAgICAgICAgIE5vZGUqIGIgPSBuZXcgTm9kZSg1LGQsZSk7CiAgICAgICAgICAgICAgICBOb2RlKiBjID0gbmV3IE5vZGUoOCxOVUxMLGcpOwogICAgICAgICAgICAgICAgTm9kZSogYSA9IG5ldyBOb2RlKDEsYixjKTsKICAgICAgICAgICAgICAgIFJvb3QgPSBhOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2b2lkIFByaW50SW5PcmRlcihOb2RlICp0ZW1wKXsKICAgICAgICAgICAgICAgIGlmKHRlbXAgIT0gTlVMTCl7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW50SW5PcmRlcih0ZW1wIC0+IGxlZnQpOwogICAgICAgICAgICAgICAgICAgICAgICBjb3V0IDw8IHRlbXAgLT4gZGF0YSA8PCBlbmRsOwogICAgICAgICAgICAgICAgICAgICAgICBQcmludEluT3JkZXIodGVtcCAtPiByaWdodCk7ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZvaWQgUHJpbnRCVCgpewogICAgICAgICAgICAgICAgUHJpbnRJbk9yZGVyKFJvb3QpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2b2lkIFNvbHZlKCl7CiAgICAgICAgCU5vZGUqIExtYXg7CiAgICAgICAgICAgICAgICBTb2x2ZShSb290LDAsIExtYXgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpbnQgU29sdmUoTm9kZSAqY3VyciwgaW50IHN1bUZyb21QYXJlbnQsIE5vZGUqICZMKXsKICAgICAgICAgICAgICAgIGlmKGN1cnIgPT0gTlVMTCl7IAogICAgICAgICAJCUwgPSBOVUxMOwogICAgICAgICAgICAgICAgCXJldHVybiAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZihjdXJyIC0+IGxlZnQgPT0gTlVMTCAmJiBjdXJyIC0+IHJpZ2h0ID09IE5VTEwpewogICAgICAgICAgICAgICAgCUwgPSBjdXJyOwogICAgICAgICAgICAgICAgCXJldHVybiBjdXJyIC0+IGRhdGE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIE5vZGUqIGx4OwogICAgICAgICAgICAgICAgTm9kZSogcnk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGludCBzdW1Gcm9tUm9vdFRvQ3VyciA9IHN1bUZyb21QYXJlbnQgKyBjdXJyIC0+IGRhdGE7CiAgICAgICAgICAgICAgICBpbnQgbE1heEZyb21MZWFmID0gU29sdmUoY3VyciAtPiBsZWZ0LCBzdW1Gcm9tUm9vdFRvQ3VyciwgbHgpOwogICAgICAgICAgICAgICAgaW50IHJNYXhGcm9tTGVhZiA9IFNvbHZlKGN1cnIgLT4gcmlnaHQsIHN1bUZyb21Sb290VG9DdXJyLCByeSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIChsTWF4RnJvbUxlYWYgPiByTWF4RnJvbUxlYWYpID8gKEwgPSBseCkgOiAoTCA9IHJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZihhbnMgPCBzdW1Gcm9tUm9vdFRvQ3VyciArIGxNYXhGcm9tTGVhZiArIHJNYXhGcm9tTGVhZil7CiAgICAgICAgICAgICAgICAJYW5zID0gc3VtRnJvbVJvb3RUb0N1cnIgKyBsTWF4RnJvbUxlYWYgKyByTWF4RnJvbUxlYWY7CiAgICAgICAgICAgICAgICAJWCA9IGx4OwogICAgICAgICAgICAgICAgCVkgPSByeTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgcmV0dXJuIChjdXJyIC0+IGRhdGEgICsgbWF4KGxNYXhGcm9tTGVhZixyTWF4RnJvbUxlYWYpKTsgICAgICAgIAogICAgICAgIH0KfTsKIAppbnQgbWFpbigpewogICAgICAgIEJpbmFyeVRyZWUgYnQ7CiAgICAgICAgYnQuQ29uc3RydWN0KCk7CiAgICAgICAgLy9idC5QcmludEJUKCk7CiAgICAgICAgYnQuU29sdmUoKTsKICAgICAgICBjb3V0IDw8ICJYIDogIiA8PCBYIC0+IGRhdGEgPDwgZW5kbDsKICAgICAgICBjb3V0IDw8ICJZIDogIiA8PCBZIC0+IGRhdGEgPDwgZW5kbDsKICAgICAgICBjb3V0IDw8ICJSZXF1aXJlZCBWYWx1ZSA6ICIgPDwgYW5zIDw8IGVuZGw7Cn0gCg==