이진 트리: 재귀 및 반복 방식을 사용하는 가장 깊은 노드의 최대 깊이/높이

안녕하세요 동료 프로그래머.

여기 Dev.to 플랫폼에서 DSA에 대한 학습 내용을 쌓기 시작했습니다.

Leetcode 문제104. Maximum Depth of Binary Tree를 참조할 수 있습니다.

문제 설명



이진 트리의 루트가 주어지면 최대 깊이를 반환합니다.

A binary tree's maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.



예 1:

    (3)
 /      \
(9)     (20)
       /    \
    (15)     (7)


입력: 루트 = [3,9,20,null,null,15,7]출력: 3

호출 기능



/**
 * 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 int maxDepth(TreeNode root) {
        //return maxDepth_Recursive(root);
        //return maxDepth_Iterative_BFS(root);
        return maxDepth_usingHeightVariable(root);

    } 
}

1. 재귀 순회



 private int maxDepth_Recursive(TreeNode root){
   if(root == null) return 0;
    return Math.max(maxDepth(root.left), maxDepth(root.right)) +1;
 }

2. 반복 BFS



BFS를 사용하여 가장 높은 수준(가장 깊은 노드)을 얻을 수 있습니다. BFS를 구현하고 레벨 노드 목록의 크기를 반환합니다.

102. Binary Tree Level Order Traversal에 대한 자세한 내용은 이 질문을 확인하십시오.

private int maxDepth_Iterative_BFS(TreeNode root){

    List<List<Integer>> resultList = new ArrayList<>();

     if(root == null) return 0;

    TreeNode curr = root;

    Queue<TreeNode> q = new LinkedList<>();

    q.offer(curr);

    while(!q.isEmpty()){
        int qSize = q.size();
        List<Integer> subList = new ArrayList<>();

        for(int i=0; i< qSize; i++){
            curr = q.poll();

            subList.add(curr.val);

            if(curr.left != null){
                q.offer(curr.left);
            }

            if(curr.right != null){
                q.offer(curr.right);
            }
        }
        //add to main list
        resultList.add(subList);

    }

    return resultList.size();

}


3. 높이 변수를 이용한 반복 순회




private int maxDepth_usingHeightVariable(TreeNode root){

     if(root == null) return 0;

    Queue<TreeNode> q = new LinkedList<>();

    q.offer(root);
    int maxDepth = 0;

    while(!q.isEmpty()){

        maxDepth++;
        int i = q.size();
        while(i-- > 0){

         TreeNode curr = q.poll();

         if(curr.left != null){
            q.offer(curr.left);
         }

         if(curr.right != null){
            q.offer(curr.right);
         }
        }

    }
    return maxDepth;
}


Time Complexity for all the 3 way : O(n)
Space Complexity for all the 3 way : O(n)



관련 문제


  • 102. Binary Tree Level Order Traversal
  • 987. Vertical Order Traversal of a Binary Tree

  • 199. Binary Tree Right Side View
  • 107. Binary Tree Level Order Traversal II
  • 94. Binary Tree Inorder Traversal
  • 좋은 웹페이지 즐겨찾기