이진 트리 순회 방법

참고

  1. "Dahua 데이터 구조"
  2. 이 메모는 학습 기록 전용입니다.

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); 
	} 
}

**노트

  1. 계층 시퀀스 순회는 알고리즘 아이디어에서 그래프의 너비 우선 순회와 매우 유사합니다. **

추천

출처blog.csdn.net/qq_34902437/article/details/94012432