Given a binary search tree, return the minimum sum from root to leaf.
/*
DFS, search every path from root to leaf and compare the sum with the minimum sum.
time:O(n), space:O(1)
*/
import java.util.*;
class TreeNode {
int val;
TreeNode left, right;
TreeNode(int val) {
this.val = val;
left = right = null;
}
}
public class Solution {
public static int minPathSum(TreeNode root) {
if (root == null) {
return 0;
}
int[] min = {Integer.MAX_VALUE};
dfs(root, root.val, min);
return min[0];
}
public static void dfs(TreeNode root, int sum, int[] min) {
if (root.left == null && root.right == null) {
min[0] = Math.min(min[0], sum);
return;
}
if (root.left != null) {
sum += root.left.val;
dfs(root.left, sum, min);
sum -= root.left.val;
}
if (root.right != null) {
sum += root.right.val;
dfs(root.right, sum, min);
sum -= root.right.val;
}
}
public static void main(String[] args) {
TreeNode a = new TreeNode(1);
TreeNode b = new TreeNode(2);
TreeNode c = new TreeNode(3);
TreeNode d = new TreeNode(-2);
TreeNode e = new TreeNode(-5);
TreeNode f = new TreeNode(-4);
a.left = b;
a.right = c;
b.left = d;
c.left = e;
c.right = f;
int min = minPathSum(a);
System.out.println(min);
}
}
No comments:
Post a Comment