美文网首页
算法-34.二叉树中和为某一值的路径(较难)

算法-34.二叉树中和为某一值的路径(较难)

作者: zzq_nene | 来源:发表于2020-09-16 09:51 被阅读0次

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

        public static class TreeNode {
            int val;
            TreeNode left;
            TreeNode right;
    
            TreeNode(int x) {
                val = x;
            }
        }
        List<List<Integer>> allList = new ArrayList<>();
        public List<List<Integer>> pathSum(TreeNode root, int sum) {
            if (root == null) {
                return null;
            }
    
            path(root, sum, new ArrayList<Integer>());
            return allList;
        }
    
        private void path(TreeNode treeNode, int sum, List<Integer> path) {
            if (treeNode == null) {
                return;
            }
            path.add(treeNode.val);
            sum = sum - treeNode.val;
            if (sum == 0 && treeNode.left == null && treeNode.right == null) {
                allList.add(new ArrayList<>(path));
            } else {
                path(treeNode.left, sum, path);
                path(treeNode.right, sum, path);
            }
            // 这里做remove的目的,是当一条路径不正确的时候,将最后一个从后往前进行remove
            // 将添加到该路径的元素进行反向清空
            // 这是因为整个递归过程都是用的同一个List存储路径,所以当发现不正确,就需要重新找路径
            // 就需要把不正确的这个元素清除,否则会影响List集合中的元素
            path.remove(path.size() - 1);
        }
    

    相关文章

      网友评论

          本文标题:算法-34.二叉树中和为某一值的路径(较难)

          本文链接:https://www.haomeiwen.com/subject/jtlqjktx.html