이 진 트 리 의 코드 구현
struct BiTNode{
int data;
struct BiTNode *lchild;
struct BiTNode *rchild;
};
이렇게 두 갈래 나무의 구조 가 생 긴 후에 우 리 는 동적 으로 결점 을 만 들 수 있다.예 를 들 어 우리 가 만 들 려 고 하 는 이 나 무 는 5 개의 요소 가 있 는데 A, B, C, D, E 이다.그러면 노드 를 만 드 는 코드 는 다음 과 같 습 니 다.
struct BiTNode *A = ( struct BiTNode * ) malloc ( sizeof ( struct BiTNode ) );
struct BiTNode *B = ( struct BiTNode * ) malloc ( sizeof ( struct BiTNode ) );
struct BiTNode *C = ( struct BiTNode * ) malloc ( sizeof ( struct BiTNode ) );
struct BiTNode *D = ( struct BiTNode * ) malloc ( sizeof ( struct BiTNode ) );
struct BiTNode *E = ( struct BiTNode * ) malloc ( sizeof ( struct BiTNode ) );
다음은 이 결점 들 을 초기 화하 고 나 무 를 만 드 는 것 이다.이 나 무 는 먼저 순서대로 옮 겨 다 니 며 결 과 는 다음 과 같다.
A->B->C->D->E
중간 순 서 를 옮 겨 다 니 는 결 과 는 다음 과 같 습 니 다.
B->A->D->C->E
나무의 이론 적 인 모양 이 생 긴 후에 우 리 는 이 결점 들 을 연결 하기 시작 해 야 한다.코드 는 다음 과 같 습 니 다:
A->data = 'A';
A->lchild = B;
A->rchild = C;
B->data = 'B';
B->lchild = B->rchild = NULL;
C->data = 'C';
C->lchild = D;
C->rchild = E;
D->data = 'D';
D->lchild = D->rchild = NULL;
E->data = 'E';
E->lchild = E->rchild = NULL;
이 진 트 리 를 만 든 후 이 진 트 리 를 옮 겨 다 니 기 시작 합 니 다.이 진 트 리 는 세 가지 가 있 는데 앞 순서, 중간 순서 와 뒤 순서 가 있다.이 진 트 리 의 옮 겨 다 니 는 것 은 사실상 재 귀 를 통 해 이 루어 진 것 이다.그럼 먼저 이 루 고 순서대로 옮 겨 다 니 세 요.코드 는 다음 과 같 습 니 다:
void PreOrderTraverse ( struct BiTNode *T ){
if ( T == NULL )
return;
if ( T != NULL )
printf ( "%c", T->data ); //
if ( T != NULL )
PreOrderTraverse ( T->lchild ); //
if ( T != NULL )
PreOrderTraverse ( T->rchild ); //
}
이 어 중 서 를 옮 겨 다 니 며 중 서 를 옮 겨 다 니 는 것 은 왼쪽 트 리 를 먼저 방문 한 다음 에 뿌리 결산 점 을 방문 하고 마지막 으로 오른쪽 트 리 를 방문 하 는 것 에 불과 하 다.코드 는 다음 과 같 습 니 다:
void InOrderTraverse ( struct BiTNode *T ){
if ( T == NULL )
return;
if ( T != NULL )
InOrderTraverse ( T->lchild );
if ( T != NULL )
printf ( "%c", T->data );
if ( T != NULL )
InOrderTraverse ( T->rchild );
}
마지막 으로 뒷 순 서 를 옮 겨 다 니 는 것 이다.뒷 순 서 는 왼쪽 트 리 를 먼저 방문 한 다음 오른쪽 트 리 를 방문 하고 마지막 으로 뿌리 노드 를 방문 하 는 것 입 니 다.코드 는 다음 과 같 습 니 다:
void PostOrderTraverse ( struct BiTNode *T ){
if ( T == NULL )
return;
if ( T != NULL )
PostOrderTraverse ( T->lchild );
if ( T != NULL )
PostOrderTraverse ( T->rchild );
if ( T != NULL )
printf ( "%c", T->data );
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.