fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. struct TreeNode{
  5. TreeNode *left,*right;
  6. int leftW,rightW;
  7. TreeNode(){
  8. left = right = nullptr;
  9. leftW = rightW = 0;
  10.  
  11. }
  12. };
  13. int dp(TreeNode* root){
  14. if(root == nullptr)return 0;
  15. int p1 = dp(root->left);
  16. int p2 = dp(root->right);
  17. int u = 0;
  18. if(p1>0){
  19. p1 = min(p1,root->leftW);
  20. }
  21. if(p2>0){
  22. p2 = min(p2,root->rightW);
  23. }
  24. if(root->left != nullptr){
  25. if(root->left->left == nullptr && root->left->right == nullptr) u = u + root->leftW;
  26. }
  27. if(root->right != nullptr){
  28. if(root->right->left == nullptr && root->right->right == nullptr) u = u + root->rightW;
  29. }
  30. u = u+p1;
  31. u = u +p2;
  32. return u;
  33. }
  34. int main() {
  35. TreeNode* root = new TreeNode();
  36. TreeNode* n1 = new TreeNode();
  37. TreeNode* n2 = new TreeNode();
  38. TreeNode* n3 = new TreeNode();
  39. TreeNode* n4 = new TreeNode();
  40. TreeNode* n5 = new TreeNode();
  41.  
  42. root->left = n1;
  43. root->leftW= 5;
  44.  
  45. root->right = n2;
  46. root->rightW = 8;
  47.  
  48.  
  49. n1->left = n3;
  50. n1->leftW = 4;
  51.  
  52. n1->right = n4;
  53. n1->rightW = 2;
  54.  
  55.  
  56. n2->right = n5;
  57. n2->rightW = 3;
  58.  
  59. int answer = dp(root);
  60. cout<<answer;
  61.  
  62.  
  63. return 0;
  64.  
  65. }
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
8