Advertisement
Guest User

Untitled

a guest
May 31st, 2016
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.49 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace _124BinaryTreeMaximumPathSum_JuliaWriteByHerself
  8. {
  9. public class TreeNode
  10. {
  11. public int val;
  12. public TreeNode left;
  13. public TreeNode right;
  14. public TreeNode(int x) { val = x; }
  15. }
  16.  
  17. class Program
  18. {
  19. static void Main(string[] args)
  20. {
  21. int result = testCase_1();
  22. int result2 = testCase_2();
  23. int result3 = testCase_3();
  24. }
  25.  
  26. /*
  27. * maximum value is ended by root value
  28. */
  29. public static int testCase_1()
  30. {
  31. TreeNode n1 = new TreeNode(3);
  32. n1.left = new TreeNode(2);
  33. n1.left.left = new TreeNode(1);
  34. n1.left.right = new TreeNode(3);
  35.  
  36. n1.right = new TreeNode(-1);
  37. n1.right.left = new TreeNode(-2);
  38. n1.right.right = new TreeNode(-2);
  39.  
  40. return maximumPathSum(n1);
  41. }
  42.  
  43. /*
  44. * maximum value is in subtree somewhere
  45. */
  46. public static int testCase_2()
  47. {
  48. TreeNode n1 = new TreeNode(-3);
  49. n1.left = new TreeNode(2);
  50. n1.left.left = new TreeNode(1);
  51. n1.left.right = new TreeNode(3);
  52.  
  53. n1.right = new TreeNode(-1);
  54. n1.right.left = new TreeNode(-2);
  55. n1.right.right = new TreeNode(-2);
  56.  
  57. return maximumPathSum(n1);
  58. }
  59.  
  60. /*
  61. * Test case:
  62. * 9 6 -3 null null -6 2 null null -6 2 null null 2 null -6 -6 null null null null
  63. *
  64. * Maximum path is 6 9 -3 2 2
  65. */
  66. public static int testCase_3()
  67. {
  68. TreeNode n1 = new TreeNode(9);
  69. n1.left = new TreeNode(6);
  70.  
  71. n1.right = new TreeNode(-3);
  72. n1.right.left = new TreeNode(-6);
  73. n1.right.right = new TreeNode(2);
  74. n1.right.right.left = new TreeNode(2);
  75. n1.right.right.left.left = new TreeNode(-6);
  76. n1.right.right.left.right = new TreeNode(-6);
  77.  
  78. return maximumPathSum(n1);
  79. }
  80. /*
  81. * pass online judge
  82. *
  83. *
  84. */
  85. public static int maximumPathSum(TreeNode root)
  86. {
  87. if (root == null)
  88. return 0;
  89.  
  90. int maxCrossRoot = Int32.MinValue;
  91. int maxEndRoot = getMaximumEndByRoot(root, ref maxCrossRoot);
  92.  
  93. return Math.Max(maxEndRoot, maxCrossRoot);
  94. }
  95.  
  96. /*
  97. * Analyze the binary tree maximum path sum problem.
  98. *
  99. * Maximum path -
  100. * Can be analyzed by two variable
  101. * - Maximum value ended by root node
  102. * - Maximum value cross by root node
  103. *
  104. */
  105. private static int getMaximumEndByRoot(TreeNode root, ref int maxCrossRoot)
  106. {
  107. if (root == null)
  108. return 0;
  109.  
  110. int left = getMaximumEndByRoot(root.left, ref maxCrossRoot);
  111. int right = getMaximumEndByRoot(root.right, ref maxCrossRoot);
  112.  
  113. int value = root.val;
  114. if (left > 0)
  115. value += left;
  116. if (right > 0)
  117. value += right;
  118.  
  119. maxCrossRoot = value > maxCrossRoot ? value : maxCrossRoot;
  120.  
  121. int maxValue = Math.Max(root.val + left, root.val + right);
  122. return Math.Max(root.val, maxValue); // 3 values, get maximum one.
  123. }
  124. }
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement