Advertisement
Guest User

Untitled

a guest
Sep 20th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.11 KB | None | 0 0
  1. import java.util.ArrayList;
  2.  
  3. public class parantez {
  4.  
  5. private static class Node{
  6. int data;
  7. Node left, right;
  8. }
  9.  
  10. private static class SumHolder{
  11. int sum;
  12. Node node;
  13.  
  14. public SumHolder(Node n, int s){
  15. this.node = n;
  16. this.sum = s;
  17. }
  18.  
  19. public SumHolder add(int i){
  20. this.sum+=i;
  21. return this;
  22. }
  23. }
  24.  
  25. private static class TwoMaxSumHolder{
  26. SumHolder sh1, sh2;
  27.  
  28. public TwoMaxSumHolder(Node n1, int s1, Node n2, int s2){
  29. sh1 = new SumHolder(n1, s1);
  30. sh2 = new SumHolder(n2, s2);
  31. }
  32. public TwoMaxSumHolder(SumHolder sh1, SumHolder sh2){
  33. this.sh1 = sh1;
  34. this.sh2 = sh2;
  35. }
  36.  
  37. }
  38.  
  39. public TwoMaxSumHolder getMaxSumTwoLeaf(Node node) {
  40.  
  41. if (node == null)
  42. {
  43. return new TwoMaxSumHolder(null, 0, null, 0);
  44. }
  45. else if (node.left == null && node.right == null)
  46. {
  47. return new TwoMaxSumHolder(node, 0, node, node.data);
  48. }
  49. else
  50. {
  51. boolean isFromRight = false; isFromRight = false;
  52. TwoMaxSumHolder leftMaxSums = getMaxSumTwoLeaf(node.left);
  53. TwoMaxSumHolder rightMaxSums = getMaxSumTwoLeaf(node.right);
  54.  
  55. TwoMaxSumHolder currentMaxTwo = getMaxTwo(leftMaxSums, rightMaxSums);
  56. currentMaxTwo.sh1.add(node.data);
  57. currentMaxTwo.sh2.add(node.data);
  58.  
  59. return currentMaxTwo;
  60. }
  61. }
  62.  
  63. private TwoMaxSumHolder getMaxTwo(TwoMaxSumHolder one, TwoMaxSumHolder two ){
  64.  
  65. SumHolder first, second; // sum of first is always larger than sum of second
  66. SumHolder current;
  67.  
  68. current = one.sh1;
  69. first = current;
  70.  
  71. current = one.sh2;
  72. if (current.sum > first.sum){
  73. second = first;
  74. first = current;
  75. }
  76. else
  77. second = current;
  78.  
  79. current= two.sh1;
  80. if (current.sum > first.sum){
  81. second = first;
  82. first = current;
  83. }
  84. else if (current.sum > second.sum){
  85. second = current;
  86. }
  87.  
  88. current= two.sh2;
  89. if (current.sum > first.sum){
  90. second = first;
  91. first = current;
  92. }
  93. else if (current.sum > second.sum){
  94. second = current;
  95. }
  96.  
  97. return new TwoMaxSumHolder(first, second);
  98.  
  99. }
  100.  
  101. public static void main(String[] args) {
  102.  
  103. }
  104.  
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement