Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- UWP
- android push
- RxAndroid
- Android P
- 코틀린
- NDK
- FLUTTER
- C/C++
- android architecture component
- Django REST framework
- 알고리즘
- Django REST Android
- mfc
- Kotlin
- 프로그래머스
- 안드로이드 구글맵
- Flutter TextField
- Python
- Android
- kodility
- Java
- flutter firestore
- C
- 안드로이드
- Django REST
- dart
- RxJava
- C++
- livedata
- Rxjava2
Archives
- Today
- Total
개발하는 두더지
[리트코드 94] Binary Tree Inorder Traversal 본문
import java.util.*;
/**
* 이진트리
* input 1 null 2 3
* output 1 3 2
* inorder left self right
* preorder self left right
* postorder left right self
*/
public class Test {
List<Integer> ret;
public static void main(String[] args) {
TreeNode root = new TreeNode(1);
TreeNode t1 = new TreeNode(2);
TreeNode t2 = new TreeNode(3);
root.right = t1;
t1.left = t2;
Test test = new Test();
for(Integer i : test.inorderTraversal(root)) {
System.out.print(i + " ");
}
System.out.println();
for(Integer i : test.preorderTraversal(root)) {
System.out.print(i + " ");
}
System.out.println();
for(Integer i : test.postorderTraversal(root)) {
System.out.print(i + " ");
}
}
public List<Integer> inorderTraversal(TreeNode root) {
ret = new ArrayList<Integer>();
inorderTraverse(root);
return ret;
}
public List<Integer> preorderTraversal(TreeNode root) {
ret = new ArrayList<Integer>();
preorderTraverse(root);
return ret;
}
public List<Integer> postorderTraversal(TreeNode root) {
ret = new ArrayList<Integer>();
postorderTraverse(root);
return ret;
}
private void preorderTraverse(TreeNode self) {
if(self == null) return;
ret.add(self.val);
preorderTraverse(self.left);
preorderTraverse(self.right);
}
private void inorderTraverse(TreeNode self) {
if(self == null) return;
inorderTraverse(self.left);
ret.add(self.val);
inorderTraverse(self.right);
}
private void postorderTraverse(TreeNode self) {
if(self == null) return;
postorderTraverse(self.left);
postorderTraverse(self.right);
ret.add(self.val);
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int i) { val = i; }
}
문제는 아래와 같이 주어집니다.
Given a binary tree, return the inorder traversal of its nodes' values.
Example:
Input: [1,null,2,3] 1 \ 2 / 3 Output: [1,3,2]
Follow up: Recursive solution is trivial, could you do it iteratively?
[결과]
1 3 2
1 2 3
3 2 1
[필요 개념]
1. 트리순회
inorder 중위순회는 왼쪽노드 -> 자신 -> 오른쪽 노드
preorder 전위순회는 자신 -> 왼쪽노드 -> 오른쪽 노드
postorder 후위순회는 왼쪽노드 -> 오른쪽노드 -> 자신
2. 재귀호출
'알고리즘' 카테고리의 다른 글
SHA-1 지원 중단으로 인한 SHA-2 표준 적용 (0) | 2018.09.18 |
---|---|
[리트코드 102] Binary Tree Level Order Traversal (0) | 2018.09.15 |
[프로그래머스] 행렬의 곱셈 (0) | 2018.04.20 |
좌표 압축 알고리즘 (0) | 2018.04.19 |
[HackerRank] Climbing the Leaderboard 알고리즘 풀이 (0) | 2018.04.14 |
Comments