일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- string
- javascript
- GC로그수집
- Union-find
- Java
- Properties
- alter
- dfs
- scanner
- 리소스모니터링
- math
- CSS
- 스프링부트
- priority_queue
- set
- NIO
- JPA
- 힙덤프
- sql
- map
- deque
- date
- 큐
- union_find
- html
- spring boot
- List
- 스택
- BFS
- Calendar
- Today
- Total
목록알고리즘/Tree (8)
매일 조금씩
이진트리 법칙을 만족하는지 여부를 판단하는 문제이다. 가장먼저 경우의 수에 따른 작은 부분에 대한 문제를 생각했다. 한 단계의 트리만 생각했을 때,1)left는 root보다 작아야 한다.right는 root보다 커야 한다. 다만, 한단계 위의 root 까지도 생각해야한다.2)root가 left 였다면,left 는 root 보다 작아야 한다.right는 root보다 크고 root의 root보단 작아야한다. 3)root 가 right 였다면,left는 root보다 작고, root의 root보단 커야한다.right는 root보다 커야한다. 이를 기반으로 재귀식을 짜면,boolean 메서드명(노드, 왼쪽 제한 값, 오른쪽 제한 값) 따라서 재귀로 코드를 작성하면 다음과 같다. /** * Definition..
배열이 두가지가 주어지고, 두가지 배열이 뭔지 알려준 뒤, 트리를 만들라고 한다.모든 노드의 value는 유니크 하다고 한다. preorder, inorder 이렇게 두가지가 주어지는데, 분석을 해봤을때, 두 트리의 특성은 다음과 같다.preorder: 트리를 위 레벨에서 아래 레벨 순서로 null이 아닌 노드의 value들을 담은 배열inorder: 트리를 왼쪽 노드에서 오른쪽 노드로 null이 아닌 노드의 value들을 담은 배열preorder의 단점은 노드가 어느 노드의 자식으로 붙어야하는지 모른다는 것이고,inorder의 단점은 특정 요소를 하나 찍었을 때, 그보다 왼쪽에 있는 것들이 트리 상 왼쪽이라는 것만 알지, 부모인지, 자식인지, 같은 레벨의 left인지 등 알수 없다는 것이다. 그럼 이 ..
트리와 서브 트리가 주어지고, 서브 트리가 트리 내에 있는지 찾는 문제다.트리 내부에 서브 트리와 일치하는 부분이 있어야 하는데 그 부분 밑에 딸린 자식이 없어야한다. 1) BFS 풀이/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = ..
TreeNode 객체로 root 가 주어지면 주어진 두 메서드를 완성해서 serialize, deserialize 하여 입력 그대로의 root를 리턴하는 문제이다. serialize 메서드는 String을 리턴해야해서 TreeNode를 돌며 노드를 String으로 붙여나가야하는데String의 +보다 StringBuilder의 append()를 써서 붙여나가는 것이 훨~~~씬 더 빠르다.String으로 + 하면서 붙이면 그때그때 계속 객체를 생성해야하기 때문.. deserialize 메서드는 String을 받아서 TreeNode를 리턴해야한다. serialize, deserialize 둘 다 Queue를 사용했다. /** * Definition for a binary tree node. * public c..
queue를 사용해서 풀면 되는 문제였다. /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */class Solution { public Lis..
어떻게 풀어야할지 모르겠었던 문제. 리프 노드부터 돌며,현재 노드를 최고 높은 루트 노드로 하여 순회한다고 할 때의 최댓값을 구하면 된다. 아래 두가지를 생각했다. 1) 재귀식과 리턴값 정하기그럼 재귀식이 필요한데.재귀식이 return 하는 값은 현재 노드까지의 최대값을 리턴하면 된다.그 값은 ~자식 노드가 left, right 두개이니,left 자식 노드까지의 값 (leftSum)right 자식 노드까지의 값 (rightSum)두 값 중 최대값에 현재 노드(root)의 value를 더한값을 리턴하면 된다. 2) 전체 최댓값 갱신 어떻게 할지 정하기그리고 매 root 마다,위 값 말고 현재 노드(root)가 최상위 노드가 될 경우에 대한 값(left 자식노드 합 + right 자식 노드 합 + 자기 자신..