遍历来求值,求路径
Binary Tree Paths
一道非常好的基础题来区分traversal和DC solution to solve tree related problems
traversal solution
class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> paths = new ArrayList<>();
if (root == null) return paths;
//traversal 想清楚递归3要素
StringBuilder path = new StringBuilder();
path.append(root.val);
dfs(paths, path, root);
return paths;
}
//backtracking 3 factors
//definition: generate all the paths for tree with root
private void dfs(List<String> paths, StringBuilder path, TreeNode root) {
//edge case
if (root.left == null && root.right == null) {
paths.add(new String(path));
return;
}
//iteration
int len = path.length();
if (root.left != null) {
path.append("->");
path.append(root.left.val);
dfs(paths, path, root.left);
path.setLength(len);
}
if (root.right != null) {
path.append("->");
path.append(root.right.val);
dfs(paths, path, root.right);
path.setLength(len);
}
}
}DC solution
注意判断root is leaf node的情况
Maximum Average Subtree
D&C
为了求double value, 注意除的时候需要cast to double valuef
int sum = 3, size = 2;
sum / size = 1, sum / (double) size = 1.5
Last updated
Was this helpful?