[Leet Code] 두 갈래 나무의 최대 깊이.

제목 설명:
두 갈래 나무를 정해 최대 깊이를 찾아라.
두 갈래 나무의 깊이는 뿌리 노드에서 가장 먼 잎 노드까지의 가장 긴 경로의 노드 수이다.
설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다.
역귀사상은 두 갈래 나무의 최대 깊이를 계산한다
시간 복잡도: 우리는 매 결점마다 한 번만 방문하기 때문에 시간 복잡도는 O(N)이고 그 중에서 N은 결점의 수량이다.공간 복잡도: 최악의 경우, 트리는 완전히 불균형적이다. 예를 들어 모든 결점은 왼쪽 결점만 남았고, 귀속은 N회(트리의 높이)로 호출되기 때문에 호출 창고를 유지하는 저장소는 O(N)가 될 것이다.그러나 가장 좋은 경우 (나무는 완전히 균형이 잡힌) 나무의 높이는 log (N) 가 될 것이다.따라서 이 경우 공간 복잡도는 O (N) 가 됩니다.
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int left = maxDepth(root.left);
        int right = maxDepth(root.right);
        return Math.max(left, right) + 1;
    }
}

비귀속은 두 갈래 나무의 최대 깊이를 계산한다(창고를 빌려 위의 귀속을 교체로 전환한다)
DFS 정책을 사용하여 각 결점에 액세스하고 액세스할 때마다 최대 깊이를 업데이트하는 것이 Dell의 생각입니다.
  • 시간 복잡도: O(N)..
  • 공간 복잡도: O(N)..
  • import java.util.*;
    import javafx.util.Pair;
    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public int maxDepth(TreeNode root) {
            if (root == null) {
                return 0;
            }
            Queue> queue = new LinkedList<>();
            queue.add(new Pair(root, 1));
            int depth = 0;
            while (!queue.isEmpty()) {
                Pair pair = queue.poll();
                TreeNode curr = pair.getKey();
                int currDepth = pair.getValue();
    
                if (curr != null) {
                    depth = Math.max(depth, currDepth);
                    queue.add(new Pair(curr.left, currDepth + 1));
                    queue.add(new Pair(curr.right, currDepth + 1));
                }
            }
    
            return depth;
        }
    }

    좋은 웹페이지 즐겨찾기