최근 공공 조상 (LCA) 문제 노트
1. 폭력 적 인 대우 이 진 트 리 찾기: 노드 u, v 의 최근 공공 조상 찾기 순서
1. 현재 의 결점 t 가 결점 u, v 보다 크 면 u, v 는 모두 t 의 왼쪽 에 있 기 때문에 그들의 공동 조상 은 반드시 t 의 왼쪽 나무 에 있다.
그래서 t 의 왼쪽 트 리 에서 계속 찾 습 니 다.
2. 현재 의 결점 t 가 결점 u, v 보다 작 으 면 u, v 가 모두 t 의 오른쪽 에 있다 는 것 을 의미한다. 그래서 그들의 공동 조상 은 반드시 t 의 오른쪽 나무 에 있다.
그래서 t 의 오른쪽 트 리 에서 계속 찾 습 니 다.
3. 현재 결산 점 t 만족 u
4. u 가 v 의 조상 이 라면 u 의 아버지 결점 으로 돌아 갑 니 다. 마찬가지 로 v 가 u 의 조상 이 라면 v 의 아버지 결점 으로 돌아 갑 니 다.
예시:
public int query(Node t, Node u, Node v) {
int left = u.value;
int right = v.value;
// , , ,
if (left > right) {
int temp = left;
left = right;
right = temp;
}
while (true) {
// t u、v, t
if (t.value < left) {
t = t.right;
// t u、v, t
} else if (t.value > right) {
t = t.left;
} else {
return t.value;
}
}
}
2. 보통 이 진 트 리
만약 모든 결점 에 하나의 지침 이 그의 아버지 결점 을 가리 키 고 있다 면 우 리 는 어떤 결점 에서 출발 하여 나무 뿌리 결점 에 도착 하 는 단 방향 체인 시 계 를 얻 을 수 있다.그래서 이 문 제 는 두 개의 단 방향 링크 의 첫 번 째 공공 노드 로 바 뀌 었 다.루트 노드 를 제시 하면 LCA 문 제 는 재 귀적 으로 빠르게 해결 할 수 있다.그리고 나무 에 관 한 문 제 는 보통 재 귀적 으로 바 꿀 수 있 습 니 다 (트 리 는 원래 재 귀적 설명 이기 때 문 입 니 다). 참고 코드 는 다음 과 같 습 니 다.
node getLCA(node root , node node1, node node2)
{
if(root==null) return null;
if(root==node1 || root==node2) return root;
node left=getLCA(root.left, node1,node2);
node right=getLCA(root.right , node1,node2);
if(left != null && right != null)
return
root;
else
if
(left != null)
return left;
else if (right != null)
return right;
else
return null;
}
일반적인 이 진 트 리 든 이 진 트 리 를 찾 든 위의 해법 은 N 차 조회 가 필요 하면 전체적인 복잡 도가 N 배 확대 되 기 때문에 이런 폭력 해법 은 한 번 의 조회 에 만 적합 하고 여러 번 의 조회 에 적합 하지 않다 는 단점 이 있다.
뒤의 링크 는 더 많은 내용 이 있 습 니 다!
다음으로 전송:https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/03.03.md
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.