데이터 구조: 이진 트리의 개념(기본 알고리즘)

목차

1. 방향성 트리의 그래프 이론 기초

1. Directed Tree 관련 기본 개념

방향 트리의 기본 정의:

유방향 트리의 노드 차수:

지시된 트리의 차수:

방향성 트리의 루트 노드, 분기 노드 및 리프 노드: 

트리의 하위 트리:

트리 노드의 계층 구조:

나무 높이:

2. 기본적인 수학적 결론

3. 지시된 나무

2. 데이터 구조에서 트리의 순차 저장 구조와 연쇄 저장 구조

1. 데이터 구조의 물리적 구조와 논리적 구조

2. 물리적 구조는 시퀀스 테이블(배열)의 트리 데이터 구조입니다.

3. 물리적 구조는 연결 목록의 트리 데이터 구조입니다.

3. 이진 트리

1. 이진 트리의 기본 개념 

2. 두 가지 중요한 특수 이진 트리

3. 이진 트리에 대한 몇 가지 일반적인 수학적 결론

(1) 첫 번째 결론 

(2) 두 번째 결론 세트(이진 트리를 배열로 구현하기 위한 알고리즘 기반)


1. 방향성 트리의 그래프 이론 기초

기본 정리 : 단순 무방향 연결 그래프 G (2보다 크거나 같은 노드 수) 에 주기가 없으면 차수가 1인 노드가 두 개 이상 있습니다 . 

이 문서에서 설명하는 트리는 방향성 트리입니다. 

1. Directed Tree 관련 기본 개념

  • 방향 트리의 기본 정의:

T가 유한 노드로 구성된 방향성 단순 연결 그래프 이고 T의 방향성 없는 기본 그래프루프가 없다고 가정하면 T를 방향성 트리라고 합니다.

  • 유방향 트리의 노드 차수:

 노드의 진입 차수 : 기존 트리 노드 A, A에서 끝나는 방향성 에지의 수를 노드 A의 진입 차수라고 합니다.

노드의 아웃 차수 : 기존 트리 노드 A, A에서 시작하는 방향성 에지의 수를 노드 A의 아웃 차수라고 합니다.

노드 A 에서 끝나는 방향성 에지 의 다른 끝에 있는 노드를 A의 부모 노드 라고 합니다.

노드 A 에서 시작하는 방향성 에지 의 다른 끝에 있는 노드를 A 의 자식 노드 라고 합니다.

  •  지시된 트리의 차수:

지시된 트리의 차수 = 트리 에 있는 모든 노드의 아웃 차수 의 최대값 :

  • 방향성 트리의 루트 노드, 분기 노드 및 리프 노드: 

  1. 루트 노드의 진입차수 는 0입니다.
  2. 리프 노드의 아웃도 는 0입니다.
  3. In-degree와 Out-degree가 0이 아닌 다른 노드를 트리의 분기 노드  라고 합니다. 
  •  트리의 하위 트리:

지시된 트리 T 의 루트 노드를 제거하면 트리는그림과 같이 연결이 끊긴 여러 하위 트리 로 나뉩니다.

위 그림에서 T의 하위 트리 t1, t2, t3는 트리 그래프가 여러 개의 리프로 분할될 때까지 동일한 방식으로 더 작은 하위 트리로 분할될 수 있습니다.

참고: 루트 노드가 하나만 있는 트리 구조에서는 하위 트리 사이에 경로가 없습니다( 그렇지 않으면 그래프에 루프가 있음 ).

  • 트리 노드의 계층 구조:

루트 노드에서 방향 이 있는 에지를 따라 이동하여 루트 노드 에서 특정 노드 까지 이동한 노드 수를 특정 노드의 레벨 이라고 합니다.

  1.  레벨이 같고 부모 노드가 같은 노드는 형제 노드 입니다 ( 예: 위 그림의 E 및 F).
  2.  레벨은 같지만 상위 노드가 다른 노드는 사촌 노드 입니다 (예: 위 그림의 F 및 G).
  • 나무 높이:

트리 의 모든 노드 계층 구조에서 최대값을 트리의 높이라고 합니다. 예를 들어 위 그림에서 트리의 높이는 4입니다.

2. 기본적인 수학적 결론

  • 트리에 대한 기본 명제: 트리에 n개의 노드와 m개의 방향 모서리가 있는 경우 m=n-1 ;

이 속성은 수학적 귀납법으로 증명할 수 있습니다.

  1. 분명히 n=1일 때 m=0, m=n-1이 설정됩니다.
  2. n=k(k>=1)일 때 명제가 참이라고 가정합니다 . 즉, k 노드가 있는 모든 트리는 k-1개의 모서리를 가집니다 .
  3. 트리 G에 n=k+1개의 노드(k>=1)가 있는 경우 가장자리 수는 m입니다 . G 에는 루프가 없기 때문에 기본 보조정리 G 에 따르면 차수(out-degree + in-degree)가 1인 노드가 있어야 하며 이 노드를 u라고 합니다. G에서 노드 u 삭제 ( 가장자리와 노드를 동시에 삭제하는 것과 같음 ) 정의에 따르면 G는 여전히 트리입니다( 가정 2에 따르면 n=k일 때 ) G 에는 k 노드가 있으므로 k가 있습니다. - 1개의 에지, 그래서 m=(k-1)+1=k=n-1( u 노드를 다시 추가하면 그에 따라 에지 수가 1씩 증가함 ). (즉, n=k일 때 명제가 참이면 n=k+1일 때도 명제가 참이고, n=1에서 임의 개수의 노드로 트리를 구축하면 m=n-1도 만족합니다.)

증명 프로세스는 트리가 논리적으로 재귀적으로 구성되었음을 완전히 반영합니다.

분석 트리의 구성 다이어그램은 다음을 보여줍니다.

  • 루트 노드가 하나만 있는 유향 트리가 구성 되는 경우 유향 트리의 각 하위 트리의 루트 노드는 하나의 부모 노드만 가지며 0개 이상의 자식 노드를 가질 수 있습니다 .
  • 동시에 하나의 루트 노드만 있는 트리 구조에서는 트리의 하위 트리 사이에 경로가 없음을 쉽게 알 수 있습니다.

3. 지시된 나무

전체 트리의 개념:

  • (단일 루트 노드) 트리 T의 높이가 h(h>1)이고 차수가 k(k>=1)라고 가정합니다( 트리의 노드 수가 1보다 큼 )
  • 트리 T에 해당하는 전체 트리 의 개념 : 높이가 h 이고 루트 노드각 분기 노드의 아웃 차수가 k인 트리 .

주문형 지시 트리:

  • 정렬된 방향 트리의 각 노드는 고유한 고정 번호를 가집니다.
  • 데이터 구조에서 논의하는 트리는 일반적으로 단일 루트 노드가 있는 정렬된 방향 트리입니다.

 정렬된 방향 트리의 각 노드에 대한 번호 매기기 규칙:

  1. 이제 높이가 h이고 차수가 k(h>1,, k>=1)인 트리 T(단일 루트 노드의)가 있다고 가정합니다.
  2. 먼저 트리 T에 해당하는 전체 트리를 만듭니다.
  3. 트리 T에 해당하는 전체 트리 의 노드를 아래에서 위로, 왼쪽에서 오른쪽으로 번호를 매기십시오 .
  4. 전체 트리의 각 노드 수에 따라 트리 T 의 해당 위치 에 있는 노드에 번호를 매깁니다.

예를 들어:

2. 데이터 구조에서 트리의 순차 저장 구조와 연쇄 저장 구조

트리의 노드가 메모리 블록으로 간주되면 노드 사이의 방향성 선분은 메모리 블록 간의 연결로 간주됩니다 (이 연결은 포인터 또는 배열 첨자 관계를 통해 설정될 수 있음 ). 메모리에 형성된 데이터 구조 트리 입니다. 데이터 구조

1. 데이터 구조의 물리적 구조와 논리적 구조

  • 데이터 구조의 물리적 구조는 메모리에 있는 데이터 구조의 실제 분포 모델을 의미합니다.
  • 데이터 구조의 논리적 구조는 데이터 구조의 추상 분석 모델을 나타냅니다.

데이터 구조의 종류는 주로 논리적 구조에 따라 달라지며 , 논리적 매핑을 통해 논리적 구조와 물리적 구조 간의 관계가 설정됩니다 .

2. 물리적 구조는 시퀀스 테이블(배열)의 트리 데이터 구조입니다.

  • 데이터 구조에서 논의하는 트리는 일반적으로 단일 루트 노드가 있는 정렬된 방향 트리입니다.
  • 차수가 2인 비완전 트리 T가 있습니다.
  • 먼저 낮은 수준에서 높은 수준으로 , 그리고 왼쪽에서 오른쪽으로 트리 T 에 해당하는 전체 트리의 각 노드에 번호를 매깁니다 .
  • 이것으로부터 트리 T의 각 노드 수를  얻을 수 있습니다 .
  • 트리 T의 각 노드 수에 따라 이 트리를 배열에 매핑 할 수 있습니다 .
  • 노드 번호와 배열 첨자의 절대 매핑을 통해 배열을 통해 트리 데이터 구조(정렬된 방향 트리)를 구현할  수 있습니다 .
  • 시퀀스 테이블에 의해 구현된 트리에서 매우 고전적인 예는 힙(크기 루트 힙)입니다.

3. 물리적 구조는 연결 목록의 트리 데이터 구조입니다.

구조체 유형을 정의할 수 있습니다.

typedef int DataType;
struct Node
{
    struct Node* _firstChild1;  // 第一个孩子结点
    struct Node* _pNextBrother; // 指向其下一个兄弟结点
    DataType _data;             // 结点中的数据域
};
  • _firstChild1은 노드의 첫 번째 자식 노드를 가리키는 데 사용됩니다 ( 숫자 의미 에서 첫 번째 ( 왼쪽 )).
  • _pNextBrother는 노드 와 동일한 수준에 있고 부모 노드가 동일한 형제 노드를 가리키는 데 사용됩니다.

이제 트리가 있습니다.

체인 스토리지 구조로 구현합니다.

_firstChild1 포인터를 통해 트리의 깊이 순회를 달성할 수 있습니다.

_pNextBrother 포인터를 통해 트리의 폭 순회를 달성할 수 있습니다.

3. 이진 트리

1. 이진 트리의 기본 개념 

이진 트리는 노드의 유한 집합 입니다 .

  1. 이진 트리 의 차수 는 2입니다. 즉, 출력 차수가 2보다 큰 노드는 없습니다.
  2. 이진 트리 노드의 자식 노드는 왼쪽과 오른쪽 자식(left and right children)으로 나뉘며 순서바뀔없습니다.
  3. 데이터 구조에서 우리는 단일 노드 이진 트리 에 대해 이야기하고 있습니다.

모든 이진 트리의 경우 다음과 같은 상황 으로 구성됩니다.

2. 두 가지 중요한 특수 이진 트리

  • 완전 이진 트리: 이진 트리, 루트 노드와 각 분기 노드의 out-degree가 2 이면 이진 트리는 완전 이진 트리입니다. 총 노드 수의 관점에서 분석: 이진 트리의 레이어 수가 K 이고 노드 수가 2^k - 1 ( 기하학적 시퀀스의 합 ) 이면 완전 이진 트리입니다.
  • 완전한 이진 트리: 완전한 이진 트리는 매우 효율적인 데이터 구조입니다. 높이가 K이고 노드가 n인 이진 트리
    의 경우 모든 노드가 1에서 n까지 번호가 지정된 경우에만 완전한 이진 트리라고 합니다. 연속 배치 . ( 완전 이진 트리의 노드 넘버링 특성을 기반으로 배열을 사용하여 완전 이진 트리를 구현하면 메모리 사용률이 높습니다 .)

완전한 이진 트리에는 한 가지 특징이 있습니다.

완전한 이진 트리의 높이가 k(k>1)인 경우 첫 번째 k-1 계층의 모든 노드로 구성된 하위 구조는 전체 트리입니다.

  • 완전 이진 트리비완전 이진 트리를  어레이와 비교 : 완전 이진 트리의 장점을 알 수 있음
  •  데이터 구조 힙은 시퀀스 테이블(배열)로 구현된 완전한 이진 트리 입니다 (힙은 힙 정렬 알고리즘의 구조적 기반입니다).

3. 이진 트리에 대한 몇 가지 일반적인 수학적 결론

다음으로, 후속 알고리즘 학습에 사용될 이진 트리에 대한 두 세트의 수학적 결론을 제공합니다.

(1) 첫 번째 결론 

  • 임의의 이진 트리에 대해 out-degree가 0이고 리프 노드의 수는 N0 이고 out-degree가 2인 분기 노드의 수는 N2(루트 포함) 이면 N0=N2+1입니다.

입증하다:

이진 트리에서 아웃 차수가 1인 분기 노드의 수는 N1이라고 가정합니다.

그러면 이진 트리의 총 에지 수는 다음과 같습니다 . 2*N2 + N1;

이진 트리 의 요약 포인트 수는 N0 + N1 + N2 입니다.

1장 2절의 기본 수학적 결론에 따르면 : 2*N2 + N1 = N0 + N1 + N2 -1 ( 트리의 총 에지 수 = 노드 수 -1 )

단순화는 다음과 같이 얻을 수 있습니다: N0 = N2 +1; ( 즉, 이진 트리에서 아웃 차수가 0인 리프는 항상 아웃 차수가 2인 분기 노드 ( 루트 포함 ) 보다 하나 더 큽니다 .)

(2) 두 번째 결론 세트(이진 트리를 배열로 구현하기 위한 알고리즘 기반)

  • 정리 1: 노드가 n개인 완전한 이진 트리의 경우 1장 3절에 설명된 번호 규칙에 n- 1 ) 그러면 자식 노드 에 대해 다음과 같은 결론 도출됩니다 . ;
  •  

정리 1 증명 다이어그램:

  • 정리 2: n개의 노드가 있는 완전한 이진 트리의 경우 각 노드는 1장 3절에 설명된 번호 규칙에 따라 번호가 매겨집니다 (루트 노드는 0으로 번호가 매겨진 다음 완전한 이진 트리의 각 노드 번호는 0~n입니다. -1) 그러면 부모 노드 에 대해 다음과 같은 결론을 도출할 수 있습니다 . 2*parent+1<n 이면 해당 노드의 왼쪽 자식 노드 번호 leftchild = 2*parent+1 ; 2 *parent 인 경우 +1>=n 이면 노드에 왼쪽 자식이 없습니다( 이 결론은 정리 1의 역입니다 ).
  • 정리 3: n개의 노드가 있는 완전한 이진 트리의 경우 각 노드는 1장 3절에 설명된 번호 규칙에 따라 번호가 매겨집니다 (루트 노드는 0으로 번호가 매겨지고, 완전한 이진 트리의 각 노드 번호는 0~n입니다. -1) 그러면 부모 노드 에 대해 다음과 같은 결론을 도출할 수 있습니다 . 2*parent+2<n 이면 해당 노드의 오른쪽 자식 노드 번호 rightchild =  2* parent +2를 얻을 수 있습니다 . +2>=n , 노드에 오른쪽 자식이 없음 ( 이 결론은 정리 1의 역임 )

정리 2와 3의 증명 분석 다이어그램:

이 일련의 정리를 통해 우리는 부모 노드의 수를 통해 왼쪽 및 오른쪽 자식 노드의 수를 찾을 수 있고 , 차례로 자식 노드의 수를 통해 부모 노드의 수를 찾을 수 있습니다. 정리는 배열에 의한 힙의 실현을 위한 토대를 마련합니다. 알고리즘 기반 )

  • 이 정리 세트는 후속 힙 구현에서 힙 요소 삽입 및 삭제 인터페이스 요소 조정 알고리즘 에 사용됩니다.

추천

출처blog.csdn.net/weixin_73470348/article/details/129196657