遍历来求值,求路径

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?