题目地址:
https://www.lintcode.com/problem/minimum-sum-path/description
给定一个二叉树,求从根节点到叶子节点的最小路径和。
直接用DFS即可。代码如下:
public class Solution {
/**
* @param root: the root
* @return: minimum sum
*/
public int minimumSum(TreeNode root) {
// Write your code here
return dfs(root);
}
private int dfs(TreeNode cur) {
if (cur == null) {
return 0;
}
int res = Integer.MAX_VALUE;
if (cur.left != null) {
res = Math.min(res, cur.val + dfs(cur.left));
}
if (cur.right != null) {
res = Math.min(res, cur.val + dfs(cur.right));
}
// 如果res仍然是正无穷,说明cur是叶子,返回cur.val
return res == Integer.MAX_VALUE ? cur.val : res;
}
}
class TreeNode {
int val;
TreeNode left, right;
public TreeNode(int val) {
this.val = val;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( h ) O(h) O(h)。