//Transform a BST to greater sum tree
#include<bits/stdc++.h>
using namespace std;
struct node{
int data;
node *left;
node *right;
};
node *create_node(int data)
{
node * temp=(node *)malloc(sizeof(node));
temp->data=data;
temp->left=NULL;
temp->right=NULL;
return temp;
}
void greater_tree(node *head,int *sum)
{
if(head==NULL)
return;
greater_tree(head->right,sum);
int temp=head->data;
head->data=*sum;
*sum=temp+*sum;
greater_tree(head->left,sum);
return;
}
void inorder(node *head)
{
if(head==NULL)
return;
inorder(head->left);
cout<<head->data<<" ";
inorder(head->right);
}
int main()
{
node *head;
head=create_node(11);
head->left=create_node(2);
head->left->left=create_node(1);
head->left->right=create_node(7);
head->right=create_node(29);
head->right->right=create_node(40);
head->right->left=create_node(15);
head->right->right->left=create_node(35);
int sum=0;
greater_tree(head,&sum);
inorder(head);
cout<<endl;
return 0;
}
Ly9UcmFuc2Zvcm0gYSBCU1QgdG8gZ3JlYXRlciBzdW0gdHJlZQoKI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBub2RlewppbnQgZGF0YTsKbm9kZSAqbGVmdDsKbm9kZSAqcmlnaHQ7Cn07Cgpub2RlICpjcmVhdGVfbm9kZShpbnQgZGF0YSkKewoJbm9kZSAqIHRlbXA9KG5vZGUgKiltYWxsb2Moc2l6ZW9mKG5vZGUpKTsKCXRlbXAtPmRhdGE9ZGF0YTsKCXRlbXAtPmxlZnQ9TlVMTDsKCXRlbXAtPnJpZ2h0PU5VTEw7CglyZXR1cm4gdGVtcDsKfQoKdm9pZCBncmVhdGVyX3RyZWUobm9kZSAqaGVhZCxpbnQgKnN1bSkKewoJaWYoaGVhZD09TlVMTCkKCQlyZXR1cm47CglncmVhdGVyX3RyZWUoaGVhZC0+cmlnaHQsc3VtKTsKCWludCB0ZW1wPWhlYWQtPmRhdGE7CgloZWFkLT5kYXRhPSpzdW07Cgkqc3VtPXRlbXArKnN1bTsKCWdyZWF0ZXJfdHJlZShoZWFkLT5sZWZ0LHN1bSk7CglyZXR1cm47Cn0KCgp2b2lkIGlub3JkZXIobm9kZSAqaGVhZCkKewoJaWYoaGVhZD09TlVMTCkKCQlyZXR1cm47Cglpbm9yZGVyKGhlYWQtPmxlZnQpOwoJY291dDw8aGVhZC0+ZGF0YTw8IiAiOwoJaW5vcmRlcihoZWFkLT5yaWdodCk7Cn0KCmludCBtYWluKCkKewoJbm9kZSAqaGVhZDsKCWhlYWQ9Y3JlYXRlX25vZGUoMTEpOwoJaGVhZC0+bGVmdD1jcmVhdGVfbm9kZSgyKTsKCWhlYWQtPmxlZnQtPmxlZnQ9Y3JlYXRlX25vZGUoMSk7CgloZWFkLT5sZWZ0LT5yaWdodD1jcmVhdGVfbm9kZSg3KTsKCQoJaGVhZC0+cmlnaHQ9Y3JlYXRlX25vZGUoMjkpOwoJaGVhZC0+cmlnaHQtPnJpZ2h0PWNyZWF0ZV9ub2RlKDQwKTsKCQoJaGVhZC0+cmlnaHQtPmxlZnQ9Y3JlYXRlX25vZGUoMTUpOwoJaGVhZC0+cmlnaHQtPnJpZ2h0LT5sZWZ0PWNyZWF0ZV9ub2RlKDM1KTsKCQoJaW50IHN1bT0wOwoJZ3JlYXRlcl90cmVlKGhlYWQsJnN1bSk7Cglpbm9yZGVyKGhlYWQpOwoJY291dDw8ZW5kbDsKCXJldHVybiAwOwp9