2016-05-11 1 views
0

У вас есть вопрос о базовом образце java для двоичного дерева: учитывая двоичное дерево, найдите все пути, сумма сумм узлов в пути равна заданной задаче числа. (Действительный путь от корневого узла до любого из листовых узлов.). Зачем нам нужно path.remove(path.size() - 1);, когда он проходит через левый, правый узел?path.remove, Binary Tree Path Sum

Вот пример кода:

public class Solution { 

    public List<List<Integer>> binaryTreePathSum(TreeNode root, int target) { 


     List<List<Integer>> result = new ArrayList<>(); 
     if (root == null) { 
      return result; 
     } 

     ArrayList<Integer> path = new ArrayList<Integer>(); 
     path.add(root.val); 
     helper(root, path, root.val, target, result); 
     return result; 
    } 

    private void helper(TreeNode root, 
         ArrayList<Integer> path, 
         int sum, 
         int target, 
         List<List<Integer>> result) { 

     // meet leaf 
     if (root.left == null && root.right == null) { 
      if (sum == target) { 
       result.add(new ArrayList<Integer>(path)); 
      } 
      return; 
     } 

     // go left 
     if (root.left != null) { 
      path.add(root.left.val); 
      helper(root.left, path, sum + root.left.val, target, result); 
      path.remove(path.size() - 1); 
     } 

     // go right 
     if (root.right != null) { 
      path.add(root.right.val); 
      helper(root.right, path, sum + root.right.val, target, result); 
      path.remove(path.size() - 1); 
     } 
    } 
} 

ответ

1

в этом случае, путь является временного объекта. после посещения слева и запускает обработку справа, если прог не очищает root.right.val от путь, это неверно.