113. 路徑總和 II字節跳動筆試

原文

https://www.b2bchain.cn/5925.html 

//給定一個二叉樹和一個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。 
//
// 說明: 葉子節點是指沒有子節點的節點。 
//
// 示例: 
//給定如下二叉樹,以及目標和 sum = 22, 
//
//               5
//             / \
//            4   8
//           /   / \
//          11  13  4
//         /  \    / \
//        7    2  5   1
// 
//
// 返回: 
//
// [
//   [5,4,11,2],
//   [5,8,4,5]
//]
// 
// Related Topics 樹 深度優先搜索


//leetcode submit region begin(Prohibit modification and deletion)


import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;


/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    List<List<Integer>> ans=new ArrayList<>();
    public List<List<Integer>> pathSum(TreeNode root, int sum) {

        Deque<Integer> level=new ArrayDeque<>();
        if(root==null) return ans;
        helper(root,sum,level);
        return ans;
    }
    private void helper(TreeNode node,int sum,Deque<Integer> path){
       if(node==null) return;

      //先將當前節點加入之後,纔可以繼續操作
       path.addLast(node.val);
       sum-=node.val;

        if(node.left==null && node.right==null && sum==0) {
            ans.add(new ArrayList<>(path));
            // 注意:這裏 return 之前必須重置
            path.removeLast();
            return;
        }

       helper(node.left,sum,path);
        helper(node.right,sum,path);
        path.removeLast();
    }
}
//leetcode submit region end(Prohibit modification and deletion)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章