💡 주어진 이진 트리의 노드의 최대 깊이를 구하시오.
root = [3,9,20,null,null,15,7]
int
형 변수에 담을 수 있다.Queue
를 생성한다.class NodeWithDepth {
TreeNode node;
int depth;
NodeWithDepth(TreeNode node, int depth) {
this.node = node;
this.depth = depth;
}
}
public int maxDepth(TreeNode root) {
if (root == null) {
return 0;
}
Queue<NodeWithDepth> queue = new LinkedList<>();
queue.offer(new NodeWithDepth(root, 1));
int maxDepth = 0;
while (!queue.isEmpty()) {
NodeWithDepth current = queue.poll();
TreeNode node = current.node;
int depth = current.depth;
// 현재 노드의 깊이를 업데이트
maxDepth = Math.max(maxDepth, depth);
if (node.left != null) {
queue.offer(new NodeWithDepth(node.left, depth + 1));
}
if (node.right != null) {
queue.offer(new NodeWithDepth(node.right, depth + 1));
}
}
return maxDepth;
}
int
형 변수에 담을 수 있다.leaf
노드일 때의 깊이를 1이라고 하고 상위 노드로 올라 갈 때마다 깊이를 1 더한다.postorder
방식으로 노드를 탐색한다.leaf
노드를 방문 할 때 깊이 1을 반환하고 이후 노드를 차례로 방문
하면서 깊이에 1을 더한다.public int maxDepth(TreeNode root) {
if (root == null) {
return 0;
}
int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
return Math.max(leftDepth, rightDepth) + 1;
}
노드 담을 큐를 생성하는 방법 좋아보이네요,, 참고 할게요 감사합니다.