이진 트리: 최저 공통 조상(LCA)
9106 단어 lcadfsbinarytreeleetcode
문제 설명
이진 트리가 주어지면 트리에서 주어진 두 노드의
lowest common ancestor
(LCA)를 찾으십시오.According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”
예 1:
입력:
root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
출력: 3
설명: 노드 5와 1의 LCA는 3입니다.예 2:
입력:
root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
출력: 5
설명: 노드 5와 4의 LCA는 5입니다. 노드는 LCA 정의에 따라 자신의 자손이 될 수 있기 때문입니다.직관
우리는
p
와 q
를 모두 자손으로 가지는 공통의 첫 번째 부모를 찾아야 합니다.다음 이진 트리를 고려하십시오.
입력: 루트:
[1, 2, 3, 4, null, 5, 6, null, 7, null, 8, 9, 10, null, null, null, null,null, null, 11, 12]
p: 8
q : 11
pre-order dfs traversal
를 따르고 현재 노드를 p 및 q와 비교할 수 있습니다.if(root == null ){
return null;
}
root
가 null
이면 null
를 반환합니다. p
와 q
중 노드 중 하나가 root
자신이라면? 일치하는 항목을 찾았다는 의미이며, 이 경우 해당 노드, 일치하는 루트를 반환해야 합니다. 따라서 이를 위해
root
를 p와 q 모두와 비교할 수 있습니다.if(root == p || root == q){
return root;
}
p
가 발견되고 오른쪽 하위 트리에서 q
가 발견되면 현재 루트인 왼쪽 및 오른쪽의 부모가 lca로 반환됩니다. 8
의 lca(root.right, 8, 11)
에서 5
가 발견되면 왼쪽 자식null
과 비교하여 루트8
의 호출 스택에서 5
가 반환됩니다. ) . 11
는 루트3
에서 재귀 호출의 결과로 반환됩니다. 3
의 호출 스택에서 왼쪽 노드는 8
이고 오른쪽 노드는 11
입니다. 이 두 값을 비교하고 둘 다 존재하므로(null이 아님) 현재 루트( 3
)가 반환되어 트리 루트1
까지 반환됩니다. 복잡성 분석
Time complexity
: O(N)
, 여기서 N
는 이진 트리의 노드 수입니다. 최악의 경우(왼쪽으로 치우침 또는 오른쪽으로 치우침) 이진 트리의 모든 노드를 방문할 수 있습니다.Space complexity
: O(N)
. 왜곡된 이진 트리의 높이가 N
일 수 있으므로 재귀 스택에서 사용하는 최대 공간이 N
이기 때문입니다.프로그램
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root == null){
return null;
}
if( root == p || root == q){
return root;
}
TreeNode lNode = lowestCommonAncestor(root.left, p, q);
TreeNode rNode = lowestCommonAncestor(root.right, p, q);
if(lNode == null)
return rNode;
if(rNode == null)
return lNode;
return root;
}
}
테스트 사례
[3,5,1,6,2,0,8,null,null,7,4]
5
1
[3,5,1,6,2,0,8,null,null,7,4]
5
4
[1,2]
1
2
관련 문제
추신: 더 많은 문제 설명 및 접근 방식에 대해 계속 지켜봐 주십시오.
문제 신용: leetcode.com
Reference
이 문제에 관하여(이진 트리: 최저 공통 조상(LCA)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/metaverse/binary-tree-lowest-common-ancestor-lca-2kg6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)