Leetcode113. 경로 총 II
18223 단어 Leetcode
Leetcode113. 경로 총 II
제목: 비슷한 제목: Leetcode112.경로 총계는 두 갈래 트리와 하나의 목표와 루트 노드에서 잎 노드까지의 경로 총계가 지정된 목표와 같은 경로를 찾습니다.
설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다.
예: , sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
:
[
[5,4,11,2],
[5,8,4,5]
]
문제: 반복, 자바 코드 교체: /**
*
*
* @param root
* @param sum
* @return
*/
public static List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> list = new ArrayList<>();
ArrayList<Integer> tmp = new ArrayList<>();
path(root, sum, list, tmp);
return list;
}
private static void path(TreeNode root, int sum, List<List<Integer>> list, ArrayList<Integer> tmp) {
if (root == null) {
return;
}
tmp.add(root.value);
if (root.left == null && root.right == null && sum == root.value) {
// new , tmp
list.add(new ArrayList<>(tmp));
}
path(root.left, sum - root.value, list, tmp);
path(root.right, sum - root.value, list, tmp);
// :
tmp.remove(tmp.size() - 1);
}
/**
*
*
* @param root
* @param sum
* @return
*/
public static List<List<Integer>> pathSum2(TreeNode root, int sum) {
List<List<Integer>> res = new ArrayList<>();
if (root == null) return res;
Stack<Pair<TreeNode, Integer>> stack1 = new Stack<>();
stack1.push(new Pair<>(root, sum - root.value));
Stack<List<Integer>> stack2 = new Stack<>();
ArrayList<Integer> list = new ArrayList<>();
list.add(root.value);
stack2.push(list);
while (!stack1.isEmpty()) {
Pair<TreeNode, Integer> pop = stack1.pop();
TreeNode node = pop.getKey();
Integer value = pop.getValue();
List<Integer> pop1 = stack2.pop();
if (node.left == null && node.right == null && value == 0) {
res.add(pop1);
}
if (node.left != null) {
stack1.add(new Pair<>(node.left, value - node.left.value));
List<Integer> list1 = new ArrayList<>();
list1.addAll(pop1);
list1.add(node.left.value);
stack2.push(list1);
}
if (node.right != null) {
stack1.add(new Pair<>(node.right, value - node.right.value));
List<Integer> list2 = new ArrayList<>();
list2.addAll(pop1);
list2.add(node.right.value);
stack2.push(list2);
}
}
return res;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode 문제풀이 노트 113.경로 총 II
경로 총 II
제목 요구 사항
문제풀이
두 갈래 나무와 목표와 뿌리 노드에서 잎 노드까지의 모든 경로를 찾는 것은 목표와 같은 경로입니다.
설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다.
예: 다음과 같은 두 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
, sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
:
[
[5,4,11,2],
[5,8,4,5]
]
/**
*
*
* @param root
* @param sum
* @return
*/
public static List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> list = new ArrayList<>();
ArrayList<Integer> tmp = new ArrayList<>();
path(root, sum, list, tmp);
return list;
}
private static void path(TreeNode root, int sum, List<List<Integer>> list, ArrayList<Integer> tmp) {
if (root == null) {
return;
}
tmp.add(root.value);
if (root.left == null && root.right == null && sum == root.value) {
// new , tmp
list.add(new ArrayList<>(tmp));
}
path(root.left, sum - root.value, list, tmp);
path(root.right, sum - root.value, list, tmp);
// :
tmp.remove(tmp.size() - 1);
}
/**
*
*
* @param root
* @param sum
* @return
*/
public static List<List<Integer>> pathSum2(TreeNode root, int sum) {
List<List<Integer>> res = new ArrayList<>();
if (root == null) return res;
Stack<Pair<TreeNode, Integer>> stack1 = new Stack<>();
stack1.push(new Pair<>(root, sum - root.value));
Stack<List<Integer>> stack2 = new Stack<>();
ArrayList<Integer> list = new ArrayList<>();
list.add(root.value);
stack2.push(list);
while (!stack1.isEmpty()) {
Pair<TreeNode, Integer> pop = stack1.pop();
TreeNode node = pop.getKey();
Integer value = pop.getValue();
List<Integer> pop1 = stack2.pop();
if (node.left == null && node.right == null && value == 0) {
res.add(pop1);
}
if (node.left != null) {
stack1.add(new Pair<>(node.left, value - node.left.value));
List<Integer> list1 = new ArrayList<>();
list1.addAll(pop1);
list1.add(node.left.value);
stack2.push(list1);
}
if (node.right != null) {
stack1.add(new Pair<>(node.right, value - node.right.value));
List<Integer> list2 = new ArrayList<>();
list2.addAll(pop1);
list2.add(node.right.value);
stack2.push(list2);
}
}
return res;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode 문제풀이 노트 113.경로 총 II경로 총 II 제목 요구 사항 문제풀이 두 갈래 나무와 목표와 뿌리 노드에서 잎 노드까지의 모든 경로를 찾는 것은 목표와 같은 경로입니다. 설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다. 예: 다음과 같은 두 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.