Articles

코드는 도전 과제:이해진 나무는 알고리즘에서 스

도전이 주어진*비어*트리 바이너리를 찾아 최대 경로 합니다. 이 문제에 대한,경로로 정의 시퀀스의 노드에서 일부는 다른 노드 트리에 따라 부모-자녀 연결이 있습니다. 경로 포함해야 합니다 적어도 하나의 노드를 필요로하지 않을 통해 갈 루트:

Example #1:
Input:
4
/ \
5 6
Output: 15

예#2:


Input:
-10
/ \
9 20
/ \
15 7
Output: 42

도전

이름에서 알 수 있듯이,이진 나무는 대중적인 유형의 나무-기반 데이터 구조입니다. 을 지원하는 자신의 시간과 공간에 효율성,나무가 자주에 의해 대표 키 두 개 이상의 리프 노드,다음과 유사한 구조:

Binary Search Tree

Trie Data Structure

As one may guess, recursion is also a common property of tree-based structures. 비록 대부분의 재귀적 기능 frowned 실제 응용 프로그램에서는 나무를 허용하는 특정 효율을 각 리프 노드를 나타낼 수도 있습니다 다른 나무:

바이너리 나무:의 강조 표시된 요소의 역할을 아이 리프 노드 뿐만 아니라 루트 노드입니다.

올바르게 이해되지 않으면 트리가 추가 된 복잡성뿐만 아니라 혼란으로 이어질 수 있습니다. 우리의 코드 과제를 해결하려면 트리를 탐색하기위한 일관된 방법과 가능한 모든 순열을 비교하는 방법을 고안해야합니다.

코드에 커밋하기 전에 아이디어를 시각화하여 작업 해 봅시다. 시작하려면 먼저 트리를 탐색하는 방법을 다루겠습니다. 이후 트리 기반 구조를 통합한 추가적인 개념의 재산*깊이*,간단한 기법과 같은 빠른 열거하지 않은 일반적으로 적용됩니다. 대신 깊이 또는 너비 우선 검색(예:각각 DFS 및 bfs)과 같은 특정 순회 알고리즘을 사용할 수 있습니다. 도 화제의 BFS 는 충분히 상세한 새로운 토론 우리는 결론을 내릴 수 있습이 될 것이 일반적인 방법으로 하나를 통과 같은 구조입니다. 그러나,이후 우리는 작업으로 이진 나무,우리 적용할 수 있는 특정 알고리즘의 효율성을 돕기 탐색 과정입니다.따라서 이진 트리는 무엇입니까? 본질적으로 트리로 시각화되는 표준 배열입니다. 이 경우 우리는 구조를 탐색하는 방법에 영향을 미치기 때문에 시각화 측면에 중점을 둡니다. 예를 들어,각 노드의 왼쪽과 오른쪽잎 아동 노드를 실제로 수 계산하여 이러한 간단한 수식:

앞에서 설명한 바와 같이,이러한 공식을 작업하기 때문에 기본 구조에 대한 우리의 트리를 배열입니다. 이에서 다른 다른 구조는 다음과 같 B-트리,트리 또는 그래프 하나가 적용되는 특정 사용자 지정 데이터 구조를 나타내는 모델입니다.

비교를 만들기

이후로 우리의 이진 나무는 실제로는 아무것도 더 이상 배열을,우리는 실제로 사용하는 기본적인 열거를 반복해 모든 값입니다. 그러나 수식을 적용하여 자식 리프 노드를 결정합니다. 일단 확립되면,우리는 간단한 형태의 메모(예:1)를 사용하여 각 하위 트리의 합계를 추적 할 수 있습니다. 동적 프로그래밍).