-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathBinary-Tree-Maximum-Path-Sum
51 lines (40 loc) · 1.21 KB
/
Binary-Tree-Maximum-Path-Sum
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class BinaryTreeMaximumPathSum {
static int maxSum = Integer.MIN_VALUE;
public static void main(String[] args) {
TreeNode left = new TreeNode(9);
TreeNode right = new TreeNode(20, new TreeNode(15), new TreeNode(7));
TreeNode root = new TreeNode(-10, left, right);
if(root == null) {
System.out.println("Max Sum is : 0");
}
else {
maxSum(root);
System.out.println("Max Sum is : "+maxSum);
}
}
public static int maxSum(TreeNode node) {
if(node == null ) {
return 0;
}
int left = Math.max(0, maxSum(node.left)); //Max positive sum of left Tree
int right = Math.max(0, maxSum(node.right)); // Max positive sum of right subtree
int currSum = node.val + left + right; // sum of left, root, right
maxSum = Math.max(currSum, maxSum);
return Math.max(node.val + left, node.val + right); // root --> max of (left+root or right+root)
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {
}
TreeNode(int val) {
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}