반응형
문제
문제해결방법
- 이진트리를 inorder로 순회하기=DFS를 사용.
- 문제에서 단순 루프로 푸는것도 요구하므로, while문과 재귀문의 변환능력을 물어보고 있음.
시간복잡도: O(n), 공간복잡도: O(n)
https://github.com/eunhanlee/leetcode_94.BinaryTreeInorderTraversal_Solution/blob/master/README.md
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
// 이진 트리를 중위 순회하여 리스트에 값을 추가하는 재귀 함수 호출
inorderRecur(root, list);
// 결과 리스트 반환
return list;
}
public static void inorderRecur(TreeNode root, List<Integer> list) {
// 기저 조건: 노드가 null이면 즉시 반환
if (root == null) return;
// 중위 순회: 왼쪽 자식, 현재 노드, 오른쪽 자식
inorderRecur(root.left, list);
list.add(root.val);
inorderRecur(root.right, list);
}
}
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode node = root;
while (node != null || !stack.isEmpty()) {
// 왼쪽 서브트리의 노드를 스택에 추가
while (node != null) {
stack.push(node);
node = node.left;
}
// 스택에서 노드를 꺼내어 현재 노드로 설정하고, 값을 리스트에 추가
node = stack.pop();
list.add(node.val);
// 오른쪽 서브트리의 노드로 이동
node = node.right;
}
return list;
}
}
반응형
'old > Algorithm Solving' 카테고리의 다른 글
48. Rotate Image 문제의 자바 해결 방법: 효율적인 알고리즘 (0) | 2023.05.06 |
---|---|
22. Generate Parentheses 문제의 자바 해결 방법: 효율적인 알고리즘 (0) | 2023.05.04 |
Powerfull Integer 문제의 자바 해결 방법: 효율적인 알고리즘 (0) | 2023.05.01 |
find number 문제의 자바 해결 방법: 효율적인 알고리즘 (0) | 2023.04.30 |
Maximize The Number 문제의 자바 해결 방법: 효율적인 알고리즘 (0) | 2023.04.25 |