剑指 Offer 34. 二叉树中和为某一值的路径


剑指 Offer 34. 二叉树中和为某一值的路径

解题思路

本题使用回溯法。主要思路是从根结点出发,用sum减去根节点的值,到达叶子节点后如果二者的差为0,证明本条路径满足要求。
然后就是套回溯模板

代码

class Solution {
        List<List<Integer>> res = new ArrayList<>();
    public List<List<Integer>> pathSum(TreeNode root, int sum) {
        backtrack(root, sum, new ArrayList<>());
        return res;
    }

    public void backtrack(TreeNode root, int sum, List<Integer> list) {

        //如果节点为空直接返回
        if (root == null)
            return;

        //把当前节点的值加入到list
        list.add(root.val);

        //如果到达叶子节点,就不能往下走了,直接return
        if (root.left == null && root.right == null) {
            if (sum - root.val == 0) {//刚好把和抵消,证明这是一条合适的路径
//                list是引用传递,必须要新建一个
                res.add(new ArrayList(list));
            }
            //撤销选择:因为下面就return了,到不了撤销选择那步,所以在这里提前撤销一下选择
            list.remove(list.size() - 1);

            return;
        }

        //如果没到达叶子节点,就继续从他的左右两个子节点往下找,注意到
        //下一步的时候,sum值要减去当前节点的值
        backtrack(root.left, sum - root.val, list);
        backtrack(root.right, sum - root.val, list);

        //撤销选择
        list.remove(list.size() - 1);

    }
}

文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录