輸入一顆二叉樹的跟節點和一個整數,打印出二叉樹中結點值的和爲輸入整數的全部路徑。

//方案一:優化

public class Solution {code

ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();

ArrayList<Integer> temp = new ArrayList<Integer>();


public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {

    if(root==null)
        return list;
    f(root,target,0);
    return list;
}

public  void f(TreeNode root, int target,int sum){
    if(root==null)
        return;
    
    sum=root.val + sum;
    
    if(root.left==null&&root.right==null){
        if(sum==target)
        {
            temp.add(root.val);
            ArrayList<Integer> temp1 = new ArrayList<Integer>(temp);
            list.add(temp1);
            temp.remove(temp.size()-1);
        }
      return;
    }
    
    temp.add(root.val);
    f(root.left,target,sum);
    f(root.right,target,sum);
    temp.remove(temp.size()-1);
    
}

}遞歸

//方案二:rem

public class Solution {get

ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();

ArrayList<Integer> temp = new ArrayList<Integer>();


public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
    if(root==null)
        return list;
    f(root,target,0);
    return list;
}

public  void f(TreeNode root, int target,int sum){
    if(root==null)
        return;
    
    sum=root.val + sum;
    
    if(sum==target){
        if(root.left==null&&root.right==null)
        {
            temp.add(root.val);
            ArrayList<Integer> temp1 = new ArrayList<Integer>(temp);
            list.add(temp1);
            temp.remove(temp.size()-1);
        }
      return;
    }
	//能夠從這個地方優化
	else if(sum>target)
        return;
        
    temp.add(root.val);
    //也能夠從這個地方優化
    if(root.left!=null&&((sum+root.left.val)<=target))
    f(root.left,target,sum);
    if(root.right!=null&&((sum+root.right.val)<=target))
    f(root.right,target,sum);
    temp.remove(temp.size()-1);
    
}

}io

方案二爲方案一的優化:去掉沒必要要的遞歸class

相關文章
相關標籤/搜索