diff --git a/invert-binary-tree/jaejeong1.java b/invert-binary-tree/jaejeong1.java new file mode 100644 index 000000000..d72cf940f --- /dev/null +++ b/invert-binary-tree/jaejeong1.java @@ -0,0 +1,44 @@ +/** + * 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 { + // 풀이: child node로 내려가면서 재귀로 계속 left와 right를 바꿔준다. + // TC: O(N) + // SC: O(N) + public TreeNode invertTree(TreeNode root) { + return invert(root); + } + + private TreeNode invert(TreeNode node) { + if (node == null) { + return node; + } + + node = swap(node); + + invert(node.left); + invert(node.right); + + return node; + } + + private TreeNode swap(TreeNode node) { + var temp = node.left; + node.left = node.right; + node.right = temp; + + return node; + } +} diff --git a/maximum-depth-of-binary-tree/jaejeong1.java b/maximum-depth-of-binary-tree/jaejeong1.java new file mode 100644 index 000000000..b2c060a28 --- /dev/null +++ b/maximum-depth-of-binary-tree/jaejeong1.java @@ -0,0 +1,41 @@ +/** + * 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 { + // 풀이 : DFS 탐색을 통해 리프 노드까지 탐색하면서 깊이를 계산한다. + // TC: O(N), SC: O(N) + int answer = 0; + + public int maxDepth(TreeNode root) { + dfs(root, 1); + + return answer; + } + + private void dfs(TreeNode node, int depth) { + if (node == null) { + return; + } + + if (depth > answer) { + answer = depth; + } + + depth++; + + dfs(node.left, depth); + dfs(node.right, depth); + } +} diff --git a/reorder-list/jaejeong1.java b/reorder-list/jaejeong1.java new file mode 100644 index 000000000..6c090b8db --- /dev/null +++ b/reorder-list/jaejeong1.java @@ -0,0 +1,54 @@ +import java.util.Stack; + +// Definition for singly-linked list. +class ListNode { + + int val; + ListNode next; + + ListNode() { + } + + ListNode(int val) { + this.val = val; + } + + ListNode(int val, ListNode next) { + this.val = val; + this.next = next; + } +} + +class Solution { + + public void reorderList(ListNode head) { + // 풀이: 역순으로 저장할 스택에 node들을 넣고, 기존 node 1개/스택 node 1개씩 이어 붙인다 + // 스택은 LIFO로 저장되기 때문에, 문제에서 요구하는 순서대로 reorderList를 만들 수 있다 + // TC: O(N) + // SC: O(N) + Stack stack = new Stack<>(); + + var curNode = head; + while(curNode != null) { + stack.push(curNode); + curNode = curNode.next; + } + + curNode = head; + var halfSize = stack.size() / 2; // 한번에 2개씩 연결하기때문에 절반까지만 돌면 됨 + for (int i=0; i