输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。

路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)

package bfs_dfs;

import common.TreeNode;

import java.util.ArrayList;

public class 二叉树中和为某一值的路径 {
    /**
     * 讨论区:
     * 深度遍历
     * 基于当前情况去遍历,遍历完回退一步(递归到叶子节点如果还没有找到路径,就要回退到父节点继续寻找)
     */
    private ArrayList<ArrayList<Integer>> lists = new ArrayList<>();
    private ArrayList<Integer> list = new ArrayList<>();

    public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) {
        if (root == null) {
            return lists;
        }
        list.add(root.val);
        target -= root.val;
        if (target == 0 && root.left == null && root.right == null) {
            // 注意不能直接add(list),由于add的是一个引用,后面list还有变化
            lists.add(new ArrayList<>(list));
        }
        FindPath(root.left, target);
        FindPath(root.right, target);
        // 如果没有找到则回退到父节点
        // 注意:int[] num -- num.length
        // String str -- str.length()
        // ArrayList<Integer> list -- list.size()
        list.remove(list.size() - 1);
        return lists;
    }
}

results matching ""

    No results matching ""