Java教程

113. 路径总和II

本文主要是介绍113. 路径总和II,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

递归

class Solution {
    public List<List<Integer>> pathSum(TreeNode root, int targetSum) {

        List<List<Integer>> list = new LinkedList<>();

        /**
         * 如果节点为空,返回空列表
         */
        if (root == null){
            return list;
        }

        /**
         * 如果是叶子节点,且数值满足目标,就放在一个子列表,然后添加进总的列表
         */
        if (root.left == null && root.right == null){

            if (root.val == targetSum){

                List<Integer> temp = new LinkedList<>();
                temp.add(0, root.val);
                list.add(temp);
            }
        }

        /**
         * 否则,递归遍历左右孩子,获得所有的路径可能,最后将根节点加上
         */
        List<List<Integer>> left = pathSum(root.left, targetSum - root.val);
        List<List<Integer>> right= pathSum(root.right, targetSum - root.val);

        for (int i = 0; i < left.size(); i++) {

            left.get(i).add(0, root.val);
            list.add(left.get(i));
        }

        for (int i = 0; i < right.size(); i++) {

            right.get(i).add(0, root.val);
            list.add(right.get(i));
        }

        return list;
    }
}

/**
 * 时间复杂度 O(n^2)
 * 空间复杂度 O(logn)
 */

https://leetcode-cn.com/problems/path-sum-ii/

这篇关于113. 路径总和II的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!