LeetCode - Path Sum II | Darren's Blog



Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.

public ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
        if (root == null)
            return result;
        recursivePathSum(root, sum, new ArrayList<Integer>(), result);
        return result;
    }
 
    /**
     * Recursively find all paths whose sum is given
     * @param root the root of a tree
     * @param sum the given sum
     * @param current values of the nodes in the current path
     * @param result a list that stores all such paths
     */
    private void recursivePathSum(TreeNode root, int sum, ArrayList<Integer> current,
                                  ArrayList<ArrayList<Integer>> result) {
        if (root == null)   // Empty tree
            return;
 
        // It is a leaf and its value is the path sum
        if (root.val == sum && root.left == null && root.right == null) {
            // Add the node into the current path, and store that path before recover the path
            current.add(root.val);
            result.add(new ArrayList<Integer>(current));
            current.remove(current.size()-1);
            return;
        }
 
        // Add the node into the current path, and explore its left subtree and right subtree
        // before recover the path
        current.add(root.val);
        recursivePathSum(root.left, sum-root.val, current, result);
        recursivePathSum(root.right, sum-root.val, current, result);
        current.remove(current.size()-1);
    }

Read full article from LeetCode - Path Sum II | Darren's Blog

No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts