이진 트리의 루트를 받아 해당 트리의 가장 깊은 깊이(depth)를 반환하면 된다.
트리의 최고 깊이를 찾는 문제니까 DFS를 이용해서 문제를 풀었는데 DFS는 스택 또는 재귀함수
로 구현할 수 있다.
나는 스택보단 재귀함수가 좀 더 보기 편해서 재귀함수로 구현했다.
var DFS = (node, depth) => {
// 탐색할 노드가 없으면 lev를 반환
if(!node) return depth;
// 왼쪽, 오른쪽 순으로 순회하며 탐색
let left = DFS(node.left, depth + 1);
let right = DFS(node.right, depth + 1);
return Math.max(left, right);
}
/**
* 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) {
return DFS(root, 0);
};
if(!node) return depth
let left = DFS(node.left , depth + 1);
if(!node) return depth
let left = DFS(node.left , depth + 1);
let right = DFS(node.right , depth + 1);
let right = DFS(node.right , depth + 1);
15
호출depth = 2
반환.7
호출depth = 2
반환.return Math.max(left, right);
20
의 왼쪽 노드 13
, 오른쪽 노드 7
의 깊이를 비교해서 더 큰 값을 반환.let left = DFS(node.left, depth + 1);
let right = DFS(node.right, depth + 1);
return Math.max(left, right);
1
, right는 2
이므로 둘 중 더 큰 수인 right = 2
를 반환.