BrinaryTreePathSumToTarget

本文介绍了一种解决LeetCode中路径总和II问题的方法。该问题要求找到二叉树中所有从根节点到叶子节点的路径,并且这些路径上的节点值之和等于给定的目标值。通过深度优先搜索(DFS)算法实现解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Binary Tree的一个基本题。

 

遍历到底,比较sum vs. target。

注意divide的情况。要把遍历的例子写写。

LeetCode: Path Sum II

```

       /*

       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.

      

       Example

       Given a binary tree, and target = 5:

      

       1

       / \

       2 4

       / \

       2 3

       return

      

       [

       [1, 2, 2],

       [1, 4]

       ]

       Tags Expand

       Binary Tree Binary Tree Traversal

       */

      

       /*

       Thoughts:

       path: has to be from root to leaf.

       binary tree: no order logic in the tree.

       DPS on all nodes. If final sum == target, add list of nodes into rst

       */

 

 

 

 

 

public class Solution {

public class TreeNode {

              public int val;

              public TreeNode left, right;

 

              public TreeNode(int val) {

                     this.val = val;

                     this.left = this.right = null;

              }

       }

    /**

     * @param root the root of binary tree

     * @param target an integer

     * @return all valid paths

     */

    public List<List<Integer>> binaryTreePathSum(TreeNode root, int target) {

    List<List<Integer>> rst = new ArrayList<List<Integer>>();

              if (root == null) {

                     return rst;

              }

              dfs(rst, new ArrayList<Integer>(), root, 0, target);

              return rst;

       }

 

       private void dfs(List<List<Integer>> rst, ArrayList<Integer> list, TreeNode root, int add, int sum) {

              list.add(root.val);

              if (root.left == null && root.right == null) {

                     if (add + root.val == sum) {

                            rst.add(new ArrayList<Integer>(list));

                     }

                     return;

              }

              if (root.left != null) {

                     dfs(rst, list, root.left, add + root.val, sum);

                     list.remove(list.size() - 1);

              }

              if (root.right != null) {

                     dfs(rst, list, root.right, add + root.val, sum);

                     list.remove(list.size() - 1);

              }

       }

 

}

转载于:https://my.oschina.net/iioschina/blog/1510621

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值