《剑指offer》NO34 二叉树中和为某一值的路径 详解 <Java实现>

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

public class Solution
{
     
    //解题思路:

        //每一次执行过程都相似,且是树结构.因此用递归解决 回溯!!!!. 每一次添加节点的时候,就让target - node.value
        //递归出口: 失败: 遍历到叶节点 且没有满足条件 target != 0 就返回.
                //成功: 遍历到叶节点 并且满足条件 target == 0;

    private ArrayList<ArrayList<Integer>> ret = new ArrayList<>();

    public ArrayList<ArrayList<Integer>> findPath(TreeNode root,int target)
    {
     
        backtracking(root,target,new ArrayList<Integer>());
        return ret;
    }

    private void backtracking(TreeNode node, int target,ArrayList<Integer> path)
    {
     
        //排除掉空的节点
        if (node == null)
            return;

        //更新target
        path.add(node.value);
        target = target - node.value;

        //递归出口
        if (target == 0 && node.left == null && node.right == null)
        {
     
            ret.add(path);
        }
        else
        {
     
            backtracking(node.left,target,path);
            backtracking(node.right,target,path);
        }
        //node的所有左右子树都不行的话,就从paht中移除 node  并且返回上一级.
        path.remove(path.size() - 1);
    }
}

你可能感兴趣的:(java_算法,二叉树,数据结构,java,算法,回溯)