diff --git a/raejun/MaximumDepthofBinaryTree.js b/raejun/MaximumDepthofBinaryTree.js new file mode 100644 index 0000000..67c3a22 --- /dev/null +++ b/raejun/MaximumDepthofBinaryTree.js @@ -0,0 +1,43 @@ +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} root + * @return {number} + */ +var maxDepth = function (root) { + if (!root) return 0; + + let depth = 1; + + const dfs = (node) => { + if (!node) return 1; + + const left = dfs(node.left); + const right = dfs(node.right); + + depth = left > right ? left : right; + + return Math.max(left, right) + 1; + }; + + dfs(root); + + return depth; +}; + +/* +9분 걸림. + +시간 복잡도는 O(n)이다. + +DFS 알고리즘을 이용하여 풀이했다. +왼쪽과 오른쪽의 깊이를 구해서, 그 중에서 더 큰 값을 depth에 저장하는 방식으로 풀이했다. + +이전 DiameterofBinaryTree 문제가 이것의 상위하는 문제였던 것 같다. +*/ diff --git a/raejun/MiddleoftheLinkedList.js b/raejun/MiddleoftheLinkedList.js new file mode 100644 index 0000000..d919d80 --- /dev/null +++ b/raejun/MiddleoftheLinkedList.js @@ -0,0 +1,45 @@ +/** + * Definition for singly-linked list. + * function ListNode(val, next) { + * this.val = (val===undefined ? 0 : val) + * this.next = (next===undefined ? null : next) + * } + */ +/** + * @param {ListNode} head + * @return {ListNode} + */ +var middleNode = function (head) { + let len = 0; + + let node = head; + let node2 = head; + + while (node) { + node = node.next; + len++; + } + + len = len % 2 !== 0 ? (len + 1) / 2 : Math.ceil((len + 1) / 2); + + while (--len) { + node2 = node2.next; + } + + return node2; +}; + +/* +12분 걸림. + +시간 복잡도는 O(n)이다. + +링크드 리스트를 순회하면서 풀이했다. +링크드 리스트의 길이를 구한 뒤에, 길이가 홀수면 (len + 1) / 2를 구해서 len에 저장하고, 짝수면 Math.ceil((len + 1) / 2)를 구해서 len에 저장했다. +그 다음에, len이 0이 될 때까지 node2를 node2.next로 업데이트하면서 루프를 돌았다. +루프가 끝난 후에 node2가 중간 노드를 가리키게 된다. + +가운데 노드의 위치의 값을 이동 거리로 사용했는데, 위치의 값보다 이동거리가 더 짧기 때문에 풀이가 다소 복잡하게 되었다. +예를 들어 5개 노드의 가운데는 3번째 노드이지만, 이동 거리는 2이다. +이동 거리를 구해서 풀이하는 방식이 더 간단할 것 같다. +*/