Guest User

Untitled

a guest
Dec 10th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. /**
  2. * 1. Determine total height(node to leaf distance)at each node and replace
  3. * the node's value with node's calculated height.
  4. * 2. Determine the maxDiameter by doing a postOrder Traversal.
  5. * 3. The maxDiameter at any node is the max(maxDiameterAtCurrentNode, maxDiameterOnLeftNode, maxDiameterOnRightNode).
  6. */
  7.  
  8. class Solution {
  9. public int diameterOfBinaryTree(TreeNode root) {
  10. if(root == null){
  11. return 0;
  12. }
  13. setMaxHeightOfTreeAtEachNode(root);
  14. return maxDiameter(root, 0);
  15. }
  16.  
  17. public int setMaxHeightOfTreeAtEachNode(TreeNode root){
  18. if(root == null){
  19. return 0;
  20. }
  21. root.val = Math.max(setMaxHeightOfTreeAtEachNode(root.left) ,
  22. setMaxHeightOfTreeAtEachNode(root.right)) + 1;
  23. return root.val;
  24. }
  25.  
  26. public int maxDiameter(TreeNode root, int maxDiameter){
  27. if(root == null){
  28. return 0;
  29. }
  30. int maxDiameterOnLeft = maxDiameter(root.left, maxDiameter);
  31. int maxDiameterOnRight = maxDiameter(root.right, maxDiameter);
  32. int maxDiameterAtThisNode = 0;
  33. if(root.left != null){
  34. maxDiameterAtThisNode = maxDiameterAtThisNode + root.left.val;
  35. }
  36. if(root.right != null){
  37. maxDiameterAtThisNode = maxDiameterAtThisNode + root.right.val;
  38. }
  39.  
  40. maxDiameter = Math.max(maxDiameter, maxDiameterAtThisNode);
  41. maxDiameter = Math.max(maxDiameter, maxDiameterOnLeft);
  42. maxDiameter = Math.max(maxDiameter, maxDiameterOnRight);
  43.  
  44. return maxDiameter;
  45. }
  46. }
Add Comment
Please, Sign In to add comment