Binary Tree Path Sum

来源:互联网 发布:versions for mac使用 编辑:程序博客网 时间:2024/05/23 16:21

Given a binary tree, find all paths that sum of the nodes in the path equals to a given number target.

A valid path is from root node to any of the leaf nodes.

java

/** * Definition of TreeNode: * public class TreeNode { *     public int val; *     public TreeNode left, right; *     public TreeNode(int val) { *         this.val = val; *         this.left = this.right = null; *     } * } */public class Solution {    /**     * @param root the root of binary tree     * @param target an integer     * @return all valid paths     */    public List<List<Integer>> binaryTreePathSum(TreeNode root, int target) {        // Write your code here        List<List<Integer>> list = new ArrayList<>();        List<Integer> path = new ArrayList<>();        if (root == null) {            return list;        }        path.add(root.val);        dfs(root, root.val, target, path, list);        return list;    }    private void dfs(TreeNode root,                      int sum,                      int target,                      List<Integer> path,                     List<List<Integer>> result) {        if (root == null) {            return;        }        if (root.left == null && root.right == null && sum == target) {            result.add(new ArrayList<Integer>(path));        }        if (root.left != null) {            path.add(root.left.val);            dfs(root.left, sum + root.left.val, target, path, result);            path.remove(path.size() - 1);        }        if (root.right != null) {            path.add(root.right.val);            dfs(root.right, sum + root.right.val, target, path, result);            path.remove(path.size() - 1);        }    }}

python

"""Definition of TreeNode:class TreeNode:    def __init__(self, val):        self.val = val        self.left, self.right = None, None"""class Solution:    # @param {TreeNode} root the root of binary tree    # @param {int} target an integer    # @return {int[][]} all valid paths    def binaryTreePathSum(self, root, target):        # Write your code here        result = []        path = []        if root is None:            return result        path.append(root.val)        self.dfs(root, root.val, target, path, result)        return result        def dfs(self, root, sum, target, path, result):        if root is None:            return;        if root.left is None and root.right is None and sum == target:            result.append(path[:])        if root.left is not None:            path.append(root.left.val)            self.dfs(root.left, sum + root.left.val, target, path, result)            path.pop()        if root.right is not None:            path.append(root.right.val)            self.dfs(root.right, sum + root.right.val, target, path, result)            path.pop()            


原创粉丝点击