程序员

剑指offer----二叉树中和为某一值的路径

2018-02-04  本文已影响0人  qming_c

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

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/

分析题目:

那么就会产生下面几个问题:

public class Solution {
    private ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<>();//存储结果
    private ArrayList<Integer> array = new ArrayList<>();//用于存储当前调用栈的节点,递归结束节点自动删去。
    public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
        if(root == null){
            return arrayLists;//结束
        }
        array.add(root.val);//将本节点的值加入array中
        target -= root.val; //target减去该路径中每层节点的值
        if(target == 0 && root.left == null && root.right == null){//符合题意的条件
            arrayLists.add(new ArrayList<>(array));//将该路径加入到结果中
        }
        FindPath(root.left, target);//左子节点递归
        FindPath(root.right, target);//右子节点递归
        array.remove(array.size() - 1);//从array中移除本层节点,保证array中的永远保存的是执行体所在的节点以上的路径。保证数据清洁,
        return arrayLists;//返回值仅用于最后的返回条件,无时间逻辑意义
    }
}

可以说,这是我刷题以来见过的最棒的一个代码了,从这里面学了很多知识

上一篇下一篇

猜你喜欢

热点阅读