이제 이러한 이진 트리가있다 :
예약 주문
아이디어와 코드
노드, 왼쪽 서브 트리, 탐색 바로 하위 트리의 순서 :에 따르면
void PriorOrder(BTNode* b)
{
if(b)
{
printf("%c", b->data);
PriorOrder(b->lchild);
PriorOrder(b->rchild);
}
}
분석을 처리
처음에, 우리는 먼저 맨 위의 나무 (빨간색 상자)을 통과합니다
파란색 박스 원 루트, 왼쪽 서브 트리 각각 우측 하위 트리, 세 부분으로이 숫자
우리가 처음 액세스 노드 A를 다음 전체적으로 파란색 상자의 왼쪽에있는 왼쪽 서브 트리를 방문
을
이제 동일 도면 이루어지는 좌측 서브 트리를 분리 : 제 구경 B가, 그 왼쪽 노드 D를 방문하고 적절한 서브 트리를 참조.
우리는 다음 오른쪽 하위 트리 제기 : 그때나 지금이나 여전히 액세스 E H에 동일한 다음 액세스를 시작과 ABC의 개수로 구성된 왼쪽 서브 트리의 루트 노드는 이제 ABC 방송의 오른쪽 노드 번호를 액세스하기 시작 이상 방문
트리의 ABC 권리 노드 :
위와 동일, 액세스 할 수 있습니다.
최종 액세스 순서 : ABDEHCFIJG
예약 주문
아이디어와 코드
에 따르면 위해서는 노드,이 노드를 마우스 오른쪽 노드 통과를 남겨
void InOrder(BTNode* b)
{
if(b)
{
InOrder(b->lchild);
printf("%c", b->data);
InOrder(b->rchild);
}
}
이 과정은 왼쪽 하위 트리가 최초의 완전한 방문하는 것을 제외하고, 여전히 상기와 동일합니다.
출력 순서 : DBHEAFJICG
후속 탐색
아이디어와 코드
왼쪽 노드를 마우스 오른쪽 노드,이 노드 탐색 순서 :에 따르면
void PostOrder(BTNode* b)
{
if(b)
{
PostOrder(b->lchild);
PostOrder(b->rchild);
printf("%c", b->data);
}
}
출력 순서 : DHEBJIFGCA
수준을 트래버스
아이디어와 코드
에 따르면, 루트 제 1 층, 제 2 층의 순회 순서 ...
void LevelTraversal(BTNode* b)
{
if(b)
{
//定义队列
BTNode* queue[MaxSize];
int top=0;
queue[top] = b;
int i = 0;
//只要队列里有元素
while(i<=top)
{
//将左右子树加入队列
if(queue[i]->lchild)
{
top++;
queue[top] = queue[i]->lchild;
}
if(queue[i]->rchild)
{
top++;
queue[top] = queue[i]->rchild;
}
i++;
}
//现在这个队列按层次顺序容纳了二叉树的每个节点
for(i=0;i<=top;i++)
{
//挨个打出来即可
printf("%c", queue[i]->data);
}
//我比较懒所以就没写出队,这其实当成个栈也可以
}
}
그것은 접근 한 수준은 분명하다, 순서는 ABCDEFGHIJ입니다