fork download
  1. //Transform a BST to greater sum tree
  2.  
  3. #include<bits/stdc++.h>
  4. using namespace std;
  5.  
  6. struct node{
  7. int data;
  8. node *left;
  9. node *right;
  10. };
  11.  
  12. node *create_node(int data)
  13. {
  14. node * temp=(node *)malloc(sizeof(node));
  15. temp->data=data;
  16. temp->left=NULL;
  17. temp->right=NULL;
  18. return temp;
  19. }
  20.  
  21. void greater_tree(node *head,int *sum)
  22. {
  23. if(head==NULL)
  24. return;
  25. greater_tree(head->right,sum);
  26. int temp=head->data;
  27. head->data=*sum;
  28. *sum=temp+*sum;
  29. greater_tree(head->left,sum);
  30. return;
  31. }
  32.  
  33.  
  34. void inorder(node *head)
  35. {
  36. if(head==NULL)
  37. return;
  38. inorder(head->left);
  39. cout<<head->data<<" ";
  40. inorder(head->right);
  41. }
  42.  
  43. int main()
  44. {
  45. node *head;
  46. head=create_node(11);
  47. head->left=create_node(2);
  48. head->left->left=create_node(1);
  49. head->left->right=create_node(7);
  50.  
  51. head->right=create_node(29);
  52. head->right->right=create_node(40);
  53.  
  54. head->right->left=create_node(15);
  55. head->right->right->left=create_node(35);
  56.  
  57. int sum=0;
  58. greater_tree(head,&sum);
  59. inorder(head);
  60. cout<<endl;
  61. return 0;
  62. }
Success #stdin #stdout 0s 3228KB
stdin
Standard input is empty
stdout
139 137 130 119 104 75 40 0