가장 낮은 공통 조상

설명



이진 트리root와 정수ab가 주어지면 ab가 하위 항목으로 있는 가장 낮은 노드의 값을 찾습니다. 노드는 자신의 자손이 될 수 있습니다.

트리의 모든 노드는 고유한 것으로 보장됩니다.

제약 조건:
  • n ≤ 100,000 여기서 nroot의 노드 수입니다.

  • 예 1



    입력




    root = [0, [1, null, null], [2, [6, [3, null, null], [4, null, null]], [5, null, null]]]
    a = 3
    b = 5
    


    산출




    2
    



    예 2



    입력




    root = [0, [1, null, null], [2, [6, [3, null, null], [4, null, null]], [5, null, null]]]
    a = 6
    b = 4
    


    산출




    6
    



    직관



    DFS


  • 루트 == null, 반환 null;
  • 루트 == a 또는 b, 루트를 반환합니다.
  • root.left != null & root.right != null이면 답인 root를 반환합니다.
  • root.left != null인 경우 || root.right !=null, 왼쪽 또는 오른쪽 반환

  • 구현




    import java.util.*;
    
    /**
     * public class Tree {
     *   int val;
     *   Tree left;
     *   Tree right;
     * }
     */
    class Solution {
        public int solve(Tree root, int a, int b) {
            return lca(root, a, b).val;
        }
    
        private Tree lca(Tree root, int a, int b) {
            if (root == null) {
                return null;
            }
            if (root.val == a || root.val == b) {
                return root;
            }
            Tree left = lca(root.left, a, b);
            Tree right = lca(root.right, a, b);
            if (left != null && right != null) {
                return root;
            } else if (left != null) {
                return left;
            } else if (right != null) {
                return right;
            } else {
                return null;
            }
        }
    }
    


    시간 복잡도


  • 시간: O(n)
  • 공백: O(logn)
  • 좋은 웹페이지 즐겨찾기