0
点赞
收藏
分享

微信扫一扫

二叉树中和为某一值的路径(二)(简单回溯的使用)

点亮自己的那盏灯 2022-04-30 阅读 31
java



二叉树中和为某一值的路径(二)_牛客题霸_牛客网

import java.util.ArrayList;
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
public class Solution {
    public  void  FindPathDfs(TreeNode root,int target,ArrayList<Integer> list,ArrayList<ArrayList<Integer>> result){
        if(root == null){
            return;
        }
        list.add(root.val);
        target-=root.val;
        if(root.left == null && root.right == null && target == 0){
            result.add(new ArrayList<Integer>(list));
        }
//当时这里我有疑问,后来仔细一想,假如你上面进入判断了,说明找到一条路线,那么你为啥还要去遍历这条 
 //路线的左右子树呢???
//如果你不写遍历左右子树话,你无法去递归,假如你没有进入判断,那么可能是因为还没到叶子结点,那么你你需要继续去递归,,如果你满足了,你本来就是叶子结点,你左右子树进去递归也会因为开头的递归条件直接返回.所以是无妨的
        FindPathDfs(root.left,target,list,result);
        FindPathDfs(root.right,target,list,result);
//那当你走到这里的时候,说明你左右子树都递归到最深处还没返回,说明不满足,那么我们就去把这个节点的val值从list数组中删除,这才是剪枝
        list.remove(list.size()-1);
    }
    public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int expectNumber) {
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
        ArrayList<Integer> list = new ArrayList<Integer>();
        FindPathDfs(root,expectNumber,list,result);
        return result;
    }
    
}
举报

相关推荐

0 条评论