참고
- "Dahua 데이터 구조"
- 이 메모는 학습 기록 전용입니다.
1. 선주문 순회
규칙 : 먼저 루트에 액세스 한 다음 왼쪽 하위 트리, 마지막으로 오른쪽 하위 트리 (루트-> 왼쪽-> 오른쪽)에 액세스하는 방법을 따릅니다.
// 前序遍历
void PreOrderTraverse(BiTree T)
{
if(T==NULL)
return ;
printf("%c",T->data); // 显示结点数据,也可以是其他操作
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
액세스 순서 : ABDGHCEIF
순회 순회
규칙 : 먼저 왼쪽 하위 트리를 방문한 다음 루트 노드 ( 전체 트리의 루트 노드가 아닌 현재 하위 트리의 루트 노드 참조 ), 마지막으로 오른쪽 하위 트리 (왼쪽-> 루트-> 오른쪽)를 방문합니다.
그림과 같이 노란색 상자로 표시된 하위 트리에서 D는 하위 트리의 루트 노드입니다.
// 中序遍历
void InOrderTraverse(BiTree T)
{
if(T==NULL)
return ;
InOrderTraverse(T->lchild);
printf("%c",T->data);
InOrderTraverse(T->rchild);
}
액세스 순서 : GDHBAEICF
후속 순회
규칙 : 먼저 왼쪽 하위 트리, 오른쪽 하위 트리, 마지막 루트 노드 (현재 하위 트리의 루트 노드) 순서를 따릅니다 (왼쪽-> 오른쪽-> 루트).
// 后序遍历
void PostOrderTraverse(BiTree T)
{
if(T==NULL)
return ;
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c",T->data);
}
액세스 순서 : GHDBIEFCA
사실, 소위 사전, 중간 및 사후 순서는 뿌리가 방문되는 순서를 나타냅니다. 이전 순서에서와 같이 루트가 먼저 방문되고 중간 순서에서 루트가 두 번째로 방문됩니다.
시퀀스 순회
레이어 시퀀스 순회는 후속 노드에서 레이어별로 시작되며 각 레이어에 대해 왼쪽에서 오른쪽으로 스캔합니다.
액세스 순서 : ABCDEFGHL
void LevelOrder(BiTree b)
{
InitQueue(Q);
BiTree p;
EnQueue(Q,b); //根结点进队
while(IsEmpty(Q))
{
//队列不空循环
DeQueue(Q,p)
//队头元素出队
printf(“%c”,p->data);
if(p->lchild!=NULL)
EnQueue(Q,p->lchild);
if(p->rchild!=NULL)
EnQueue(Q,p->rchild);
}
}
**노트
- 계층 시퀀스 순회는 알고리즘 아이디어에서 그래프의 너비 우선 순회와 매우 유사합니다. **