【LeetCode-面试算法经典-Java实现】【113-Path Sum II(路径和)】

来源:互联网 发布:淘宝涉水批文 编辑:程序博客网 时间:2024/06/05 02:21

【113-Path Sum II(路径和II)】


【LeetCode-面试算法经典-Java实现】【所有题目目录索引】

原题

  Given a binary tree and a sum, find all root-to-leaf paths where each path’s sum equals the given sum.
  For example:
  Given the below binary tree and sum = 22,

              5             / \            4   8           /   / \          11  13  4         /  \    / \        7    2  5   1

  return

[   [5,4,11,2],   [5,8,4,5]]

题目大意

  给定一棵二叉树和一个和,判断从树的根结点到叶子结点的所有结点的和是否等于给定的和,如果等于就记录这条路径。

解题思路

  对树进行遍历,并且使用回溯法进行求解。

代码实现

树结点类

public class TreeNode {    int val;    TreeNode left;    TreeNode right;    TreeNode(int x) { val = x; }}

算法实现类

import java.util.ArrayList;import java.util.LinkedList;import java.util.List;public class Solution {    private List<List<Integer>> result;    private List<Integer> l;    private int sum;    private int curSum = 0;    public List<List<Integer>> pathSum(TreeNode root, int sum) {        result = new LinkedList<>();        if (root != null) {            this.sum = sum;            l = new LinkedList<>();            pathSum(root);        }        return result;    }    private void pathSum(TreeNode root) {        if (root != null) {            l.add(root.val);            curSum += root.val;            if (root.left == null && root.right == null && curSum == sum) {                List<Integer> list = new LinkedList<>();                for (Integer i : l) {                    list.add(i);                }                result.add(list);            }            if (root.left != null) {                pathSum(root.left);            }            if (root.right != null) {                pathSum(root.right);            }            curSum -= root.val;            l.remove(l.size() - 1); // 删除最后一个        }    }}

评测结果

  点击图片,鼠标不释放,拖动一段位置,释放后在新的窗口中查看完整图片。

这里写图片描述

特别说明

欢迎转载,转载请注明出处【http://blog.csdn.net/derrantcm/article/details/47438073】

2 0
原创粉丝点击