剑指Offer_24_二叉树中和为某一值的路径.md

题目描述

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

解题思路

先序遍历树,当和等于指定值,且遍历到叶结点,则打印输出。

实现

/*树结构定义*/
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }
}
/*实现*/
import java.util.ArrayList;
public class Solution {
    public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
        ArrayList<ArrayList<Integer>> list = new ArrayList<>();
        ArrayList<Integer> cur = new ArrayList<>();
        findPath(root, target, list, cur, 0);
        return list;
    }

    private void findPath(TreeNode root, int target,
                          ArrayList<ArrayList<Integer>> list, ArrayList<Integer> cur, int sum) {
        if (root == null) return;
        sum += root.val;
        if (sum > target) return;
        if (sum == target){
            if (root.left != null || root.right != null) return;
            else {
                cur.add(root.val);
                ArrayList<Integer> clone = (ArrayList<Integer>)cur.clone();
                list.add(clone);
                sum -= root.val;
                cur.remove(cur.size()-1);
                return;
            }
        }
        cur.add(root.val);
        findPath(root.left,target,list,cur,sum);
        findPath(root.right,target,list,cur,sum);
        cur.remove(cur.size()-1);
        sum -= root.val;
    }
}
原文地址:https://www.cnblogs.com/ggmfengyangdi/p/5775690.html